【问题标题】:C: scanf() inside a loop [duplicate]C:循环内的scanf()[重复]
【发布时间】:2014-10-01 16:04:28
【问题描述】:

这个程序似乎在 while 循环的每次迭代中都不接受输入,理想情况下它应该接受。但是当我用 %d 替换 scanf() 函数的 %c 参数时(即整数输入而不是char 输入)它似乎工作得很好,while 循环的每次迭代都接受该输入。为什么我会看到这种差异?

int main()
{
    char grade;
    int i=0;

    while(i<10){
        printf("Enter ur grade\n");
        scanf("%c", &grade);
        switch(grade){
            case 'A' : printf("U R THE BEST\n");
                       break;
            case 'B' : printf("U R VERY GOOD DUDE...\n");
                       break;
            case 'C' : printf("U R GOOD DUDE...\n");
                       break;
            case 'D' : printf("U R Not good DUDE...\n");
                       break;
            case 'E' : printf("U R WORST DUDE...\n");
                       break;
            default  : printf("U r AWESOME...\n");
                       break;
        }
    i++;
}

【问题讨论】:

  • 你能举一个你得到的输入和输出的例子吗?
  • scanf 不会从输入缓冲区中删除换行符。 SO上有很多重复:stackoverflow.com/questions/13275417/…(不是真正的重复,而是解决您的问题)
  • 每次输入一个字符(实际上是在输入两个字符)时,输入流中都会留下一个换行符 (\n) 字符,它会在下一次迭代中使用。您需要使用getchar() 或类似技术清除它。
  • 添加 fflush(stdin);扫描后
  • 你的牙套不平衡。还有for(int i = 0; i &lt; 10; ++i)怎么了?

标签: c loops scanf


【解决方案1】:

试试这个:在%c之前放一个空格,因为它也存储了\n

 scanf(" %c", &grade);

【讨论】:

    【解决方案2】:

    scanf%c 之前添加一个空格。这样做是为了在扫描字符之前从stdin 中删除所有空白。 scanf 在输入字符后不接受\n(enter key) 字符,而是将其留在缓冲区中,当再次调用scanf 时将其保留。

    另一件事:您忘记在代码中添加}

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 2017-06-28
      • 2013-12-20
      • 2023-04-09
      相关资源
      最近更新 更多