我正在为学校编写一个程序,用户输入姓名,工作小时数和小时工资。
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 A Y R O L L P R O G R A M\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()
前的订单,但无济于事。
答案 0 :(得分:4)
您的scanf
调用在输入缓冲区中留下了换行符。因此,当进行fgets
调用时,它会读取该换行符并返回。
根据上面的评论,请查看C FAQ中Question 12.18a的答案。
答案 1 :(得分:3)
scanf
可能不是在行的末尾吃回报,所以它被传递给第一个fgets。就个人而言,我讨厌scanf - 最好使用fgets,然后使用sscanf解析该行。