【问题标题】:Infinite loop C, infinite loop [duplicate]无限循环C,无限循环[重复]
【发布时间】:2016-01-06 21:10:07
【问题描述】:

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

【问题讨论】:

  • 你执行了这段代码吗?你知道infinite loop是什么吗?
  • 我执行了这段代码,我认为无限循环在“scanf("%d",&nb3);"附近。我不能用这个 scanf 在 nb3 中写一个新数字。
  • scanf 要求用户输入。您对程序的输入是什么(在控制台中)?你按回车了吗?
  • 您输入的号码必须是&gt;0 &amp;&amp; &lt;48 或&gt;57 &amp;&amp; &lt;=100。你输入了什么?
  • 另外,你想用isdigit(nb3) &amp;&amp; (isdigit(nb3) !=0)做什么?那部分没有意义。嗯,确实如此,但它做了两次相同的测试。

标签: c


【解决方案1】:

您的代码有两个奇怪的问题。您的代码的意图似乎是要求用户输入一个负数或大于 100 的数字。如果用户输入范围为 [0,100] 的数字或非数字 (即:一个字母/字符),循环中断。

首先,scanf() 调用在输入缓冲区中留下一个换行符。 gets()、fgets() 和 scanf() 的问题是 StackOverflow 上常见的初学者问题。但是,您的代码中还有另一个错误,所以我还没有将其标记为 100% 重复。

您的支票(isdigit(nb3) &amp;&amp; (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;
}

【讨论】:

  • 感谢您更新的代码@Dogbert,我今天早上检查了一下,它工作了。我的程序也可以工作。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2013-03-22
  • 2011-03-31
相关资源
最近更新 更多