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;
}
另一种更复杂的方法是使用函数 fgets
和 strtol
并检查它们的结果。
我正在尝试编写一个简单的 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;
}
另一种更复杂的方法是使用函数 fgets
和 strtol
并检查它们的结果。