Hi rahul - it's because the scanf("%f" doesn't read the newline/return that you enter at the end of the balance value. So that ends up as input to the next fgets, which sees it as the end of its input. Thus it reads an empty string, without you apparently having entered anything.
I suggest using fgets for both. Eg. for the balance do something like
One suggestion though - there is no need for all the malloc()s. They complicate the code, and they might fail (which you aren't testing for, but you should be). Just use arrays of char.