为什么while循环无限运行而不是等待来自fgets()的更多输入?

时间:2017-02-07 06:39:10

标签: c fgets

男孩,这件事让我感到难过。我想创建一个循环来验证用户是否输入了int(而不是其他一些数据类型)。为此,我使用fgets()获取用户输入的第一个字符,然后检查该字符是否为数字(这是我的代码中断的最小部分)。

char input[2];

int main(){
  printf("Please enter the minimum value the random number can be: ");
  fgets(input, sizeof(input), stdin);
  printf("%c", input[0]);
  if(!isdigit(input[0])){
    int escape = 0;
    while(escape == 0)
      printf("Try again: ");
      fgets(input, sizeof(input), stdin); //This will now overwrite whatever was in 'input'
      if (isdigit(input[0])) //Will keep looping back to the fgets(), asking for new input each time until you enter a number.
        escape = 1;
      flushInpt();
  }

在上面的代码中(假设所有正确的库都是#included),它应该询问输入(它执行)然后检查该输入的第一个字符是否为数字(它是)并且如果它不是数字,它应该进入while循环,在那里打印“再试一次:”,新的fgets()等待用户放入新的输入。它保持在while循环内,直到它们输入一个数字作为第一个字符,此时它突破循环(这是它不执行的部分)。

但是每当我第一次输入非数字时,它会按预期进入while循环,然后无限次地打印“再次尝试:”而不会停止在getsf()语句中等待新的输入?我的问题是为什么它无限循环?

我已经验证了flushInpt()函数不是罪魁祸首,因为无论该调用是否在循环中,都会出现问题。如果您想知道,flushInpt只是一个基本循环函数,它遍历输入缓冲区并删除可能存在的任何内容。

char ch;

void flushInpt(){
  while ((ch = getchar()) != '\n' && ch != EOF)
  continue;
}

1 个答案:

答案 0 :(得分:2)

你缺少花括号:

while(escape == 0)
{   //<--
  printf("Try again: ");
  fgets(input, sizeof(input), stdin); //This will now overwrite whatever was in 'input'
  if (isdigit(input[0])) //Will keep looping back to the fgets(), asking for new input each time until you enter a number.
    escape = 1;
  flushInpt();
}   //<--

我想这个块就是你的while循环。