首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已跳过fgets()

已跳过fgets()
EN

Stack Overflow用户
提问于 2011-09-02 05:41:36
回答 2查看 3.5K关注 0票数 2

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

代码语言:javascript
复制
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;

大小为50,包含stdio.h和stdlib.h。当我编译并移到A开关时,它跳过fgets()输入,直接转到"Enter Hourly Rate: " scanf()。我试着改变了把scanf()放在fgets()前面的顺序,但没有效果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-02 05:47:56

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

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

票数 4
EN

Stack Overflow用户

发布于 2011-09-02 05:45:58

scanf可能没有吃到行尾的返回值,所以它会被传递给第一个fgets。就我个人而言,我讨厌scanf --最好使用fgets,然后使用sscanf解析代码行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7276903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档