无限循环C,无限循环

时间:2016-01-06 21:10:08

标签: c

我在循环上遇到了问题。我用这段代码进行了无限循环......

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);
}

1 个答案:

答案 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()