为什么我得到错误消息加倍/三倍...如果我给超过1个字符

时间:2017-11-03 23:00:30

标签: c printf scanf

我正在尝试编写一个从用户的stdin读取的代码,并检查输入是否为整数。

这是我的功能:

 int Test(int *integer)
 {
    int input = *integer;
    int check; 

    do
    {
      check = scanf("%d", &input);

      if(check == 1) // return value should be 1
      {
        *integer= input;
        break;

      }
      else
      {
        printf("Error Message")
      }

      }while(check!=1 && getchar() != '\n');
      return 0;


    }

主:

  int digit = 0;

  Test(&digit);

如果我输入例如“a”它只给我一条“错误信息”并要求我再次输入但是如果我输入“fooooo”它会给我5条或更多错误信息然后让我再次输入。有谁知道问题是什么?

1 个答案:

答案 0 :(得分:1)

您只需执行此操作即可修复程序:

else {
    printf("Error Message");
    while(getchar() != '\n');
}

代码失败的原因:如果输入不是数字,转换将被中断,缓冲区中还剩下字符。下一轮将一次消耗一个角色,直到没有剩下一个角色。

上面的while循环将从缓冲区读取,直到换行,从而有效地清空缓冲区中不需要的字符。