我在循环上遇到了问题。我用这段代码进行了无限循环......
int nb3=0;
while ((nb3 <=0) || (nb3 > 100) || (isdigit(nb3) && (isdigit(nb3) !=0)) )
{
printf("%d\n", nb3);
nb3=1;
printf("%d\n", nb3);
printf("Le nombre saisi est incorrect, veuillez le ressaisir \n");
scanf("%d",&nb3);
}
答案 0 :(得分:1)
您的代码存在两个奇怪的问题。您的代码的意图似乎是要求用户输入一个负数或大于100的数字。如果用户输入的数字范围为[0,100]
或非数字(即:一个字母/字符),循环爆发。
首先,scanf()
调用在输入缓冲区中留下换行符。 gets()
,fgets()
和scanf()
的问题是StackOverflow上常见的初学者问题。但是,您的代码中还有另外一个错误,因此我还没有将其标记为100%重复。
您的支票(isdigit(nb3) && (isdigit(nb3) !=0)
看起来不对劲。我不确定您使用isdigit(nb3) != 0
尝试实现的目标,但据我所见,它没有任何有效的用途,因为您已经使用nb3
测试了isdigit()
功能。此外,在检查字符串中的个别字符时,通常使用#include <stdio.h>
#include <ctype.h>
int main(void)
{
int nb3 = 0;
while ( (nb3 <=0) || (nb3 > 100) || isdigit(nb3) )
{
printf("%d\n", nb3);
nb3=1;
printf("%d\n", nb3);
printf("Le nombre saisi est incorrect, veuillez le ressaisir \n");
scanf("%d", &nb3);
fflush(stdin);
}
return 0;
}
来表示它们是否表示数值。你对它的使用似乎是错误的。
下面提供了一个更新的代码清单,它应该修复我认为你遇到的无限循环行为。
let API = APIGet()