fgets()跳过

我正在为学校编写一个程序,用户输入姓名,工作时间和小时工资。

int main () { char name[SIZE]; char selection = 'Z'; int hoursWorked = 0, counter = 0, flag = 1; float hourlyRate = 0.0; const float otRate = 1.5; const int week = 40; while (flag == 1) { system ("cls"); printf ("\n\tP AYROLLPROGRAM\n"); printf ("---------------------------------------------\n"); printf ("\t(A) - New Payroll Info\n\t(B) - Display Payroll\n\t(C) - Quit\n\t"); scanf (" %c", &selection); selection = toupper (selection); switch (selection) { case 'A': system ("cls"); printf ("Enter Employee Name: "); fgets ( name, SIZE, stdin ); strip_newline( name, 50 ); printf ("\nEnter Hourly Rate: "); scanf ("%f", &hourlyRate); printf ("\nEnter Hours Worked This Week: "); scanf ("%d", &hoursWorked); system ("pause"); break; 

SIZE为50,包括stdio.h和stdlib.h。 当我编译并移动到A开关时,它会跳过fgets()输入并直接进入"Enter Hourly Rate: " scanf() 。 我试过更改将scanf()放在fgets()前面的顺序,但无济于事。

您的scanf调用在输入缓冲区中留下了换行符。 因此,当进行fgets调用时,它会读取该换行符并返回。

根据上面的pmg评论,请查看C FAQ中对问题12.18a的回答。

scanf可能不是在行的末尾吃掉返回,所以它被传递给第一个fgets。 就个人而言,我讨厌scanf – 最好使用fgets,然后使用sscanf解析该行。