In the below written program,
when i run it , it skips scanf and not allowing user to enter input.
tried adding getchar(), fflush but nothing worked for me.
can any one help me with this please.

program code starts from here

//file name : sort_array_of_structure.c
Code:
/*Write a program to accept records of the different states using array of structures. The structure should contain char state, population, literacy rate, and income. Display the state whose literacy rate is highest and whose income is highest.*/


#include <stdio.h>
#define M 50
struct state
{
    char name[50];
    long int population;
    float literacyRate;
    float income;
}st[M]; /*array of structure*/
int main()
 {


 int i, n, ml, mi, maximumLiteracyRate, maximumIncome;
 float rate;
 ml = mi = -1;
 maximumLiteracyRate = maximumIncome = 1;


 printf("Enter how many states:");
 scanf("%d", n);
 for (i = 1; i < n; i++)
    {
       printf("\nEnter state %d details : ",i);


       printf("\nEnter state name: ");
       scanf("%s",&st[i].name);


       printf("\nEnter total population : ");
       scanf("%d",&st[i].population);


       printf("\nEnter total literacy rate : ");
       scanf("%.2f",&rate);
       st[i].literacyRate = rate;
       
       printf("\nEnter total income : ");
       scanf("%f",&st[i].income);
      }


 for (i = 1; i < n; i++)
 {
      if(st[i].literacyRate >= maximumLiteracyRate)
          {
           maximumLiteracyRate = st[i].literacyRate;
           ml++;
          }


      if(st[i].income > maximumIncome)
          {
           maximumIncome = st[i].income;
           mi++;
          }
 }
 printf("\nState with highest literacy rate : %s",st[ml].name);
 printf("\nState with highest income : %s", st[mi].name);


 return(0);
 }