【问题标题】:getchar and scanf not works properly in cgetchar 和 scanf 在 c 中无法正常工作
【发布时间】:2015-12-10 14:57:57
【问题描述】:

我在以下代码中遇到问题:

    int main()
{
    char choice;
    char secondChoice;
    int howMany = 0;

    printf("WHAT WOULD YOU LIKE TO ORDER?\n F- fruitShake\n M- milkShake\n");
    choice = getchar();
    printf("WHAT SIZE?\n B-big\nS-small\n");
    secondChoice = getchar();
    printf("how many would you like?\n (choose a number between 1-9)\n");
    scanf("%d", &howMany);


    system("pause");
    return 0;
}

在输入第一个char(您想订购的产品)后,它可以正常工作,然后printf 都出现了,但它不能正常工作。 (就像它在secondChoice = getchar(); 上跳过一样)

【问题讨论】:

  • 您输入了F<RETURN>(两个字符),所以您的第一个getchar() 阅读为F,第二个阅读为<RETURN>...不要这样使用getchar,或者至少不要混合getcharscanf...

标签: c scanf getchar


【解决方案1】:

我的猜测是它不是跳过,而是可能从您之前的输入中读取换行符(如果您使用 Enter 键终止输入)。

【讨论】:

    【解决方案2】:

    请运行下面添加的修改后的代码,并观察程序在添加2条语句后正常运行。

      fflush(stdout);
      fflush(stdin);
    

    使用 fflush (stdin) 时请注意,我提到的一些来源建议不要使用它。您可以尝试删除 fflush(stdin) 语句并注意输出中的差异

    int main()
    {
        char choice;
        char secondChoice;
        int howMany = 0;
    
        printf("WHAT WOULD YOU LIKE TO ORDER?\n F- fruitShake\n M- milkShake\n");
        fflush(stdout);
        choice = getchar();
        fflush(stdout);fflush(stdin);
    
        printf("WHAT SIZE?\n B-big\n S-small\n");
        fflush(stdout);fflush(stdin);
        secondChoice = getchar();
    
        printf("how many would you like?\n (choose a number between 1-9)\n");
        fflush(stdout);fflush(stdin);
        scanf("%d", &howMany);
    
        printf("\nChoice = %c\nsecondChoice = %c \nhowMany = %d\n\n", choice, secondChoice, howMany);
        fflush(stdout);
    
        system("pause");
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多