陷入无限的 fgets 循环
Stuck in infinite fgets loop
我正在尝试获取整数输入,并且尝试了我能找到的最基本的方法。但是,只要某些东西不是整数,它就会陷入无限循环。我相信这是由 fgets 函数引起的。我尝试了在此站点上找到的一些解决方案,但 none 有效。代码如下
int getint()
{
int number;
char input[4];
fgets(input, 4, stdin);
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
number = atoi(input);
printf("%d\n", number);
return number;
}
如果要在循环或 if 语句中编写多个语句,则必须使用大括号 {}
来定义循环中的语句。
在您的代码中,只有 printf("Insert a non negative number: ");
语句在循环中,没有任何内容会改变循环中 input
的值,因此如果循环的条件为真,它将始终保持真实。
改为:
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
{
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
}
我正在尝试获取整数输入,并且尝试了我能找到的最基本的方法。但是,只要某些东西不是整数,它就会陷入无限循环。我相信这是由 fgets 函数引起的。我尝试了在此站点上找到的一些解决方案,但 none 有效。代码如下
int getint()
{
int number;
char input[4];
fgets(input, 4, stdin);
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
number = atoi(input);
printf("%d\n", number);
return number;
}
如果要在循环或 if 语句中编写多个语句,则必须使用大括号 {}
来定义循环中的语句。
在您的代码中,只有 printf("Insert a non negative number: ");
语句在循环中,没有任何内容会改变循环中 input
的值,因此如果循环的条件为真,它将始终保持真实。
改为:
while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
{
printf("Insert a non negative number: ");
fgets(input, 4, stdin);
}