C 中的 scanf 导致无限循环

scanf in C leading to infinite loop

我正在尝试编写一个简单的 c 程序,它使用 scanf 获取输入,并确保此输入是一个整数。为此,我编写了一个递归函数,但如果我输入一个非整数字符,该函数将进入无限循环。我附上了下面的代码。

#include <stdio.h>

int getInput() {
  int success = 0;
  int input;

  printf("Enter a positive integer: \n");
  success = scanf(" %d", &input);

  if (success == 0 || input < 0) {
    return getInput();
  }else return input;
}

问题是如果输入 non-number,输入缓冲区包含垃圾。在尝试输入另一个数字之前,您需要清除输入缓冲区。

使用您的方法调用 scanf 该函数可以通过以下方式查找示例

int getInput( void ) 
{
    int input = 0;

    printf("Enter a positive integer: \n");
  
    if ( scanf( "%d", &input) != 1 )
    {
        scanf( "%*[^\n]" ); 
    }

    return input <= 0 ? getInput() : input;
}

另一种更复杂的方法是使用函数 fgetsstrtol 并检查它们的结果。