无限循环在C中

时间:2013-10-25 17:44:19

标签: c

这段代码为我创造了一个无限循环我希望按照一些步骤将数字首次亮相为0并且打印程序执行该程序需要多少步骤

    int debut,i;
    printf("de (>= 1) ? ");
    do
    {            
        scanf("%d",&debut);
    } 
    while (debut < 1);

    int fin;
    printf("a >=  <<  << ) ? ");
    do 
    {            
        scanf("%d",&fin) ;
    } 
    while (fin < debut);

   for (;debut<=fin;debut++){
       i=0;
       while(debut!=0)
       {
           if(debut%3==0)
           {
               debut+=4;
           }
           else if (debut%3!=0 && debut%4==0){
               debut/=2;
           }
           else if (debut%3!=0 && debut%4!=0)
           {
               debut-=1;
           }
           i+=1;

       }
       printf("%d\n->%d",debut,i);    
       }

2 个答案:

答案 0 :(得分:2)

for(debut<=fin;debut++) {
    while(debut!=0) {
        //do stuff
    }
    //debut == 0, debut <= fin
}

好的,大量编辑我的答案。我在看错了循环。

要进入for循环,debut必须为<=fin。只要fin>0,并且输入了for循环,您就会陷入for循环。

while返回debut == 0之前,您一直停留在true循环中。只要debut++ <= fin,您就会陷入for循环。您正在修改debut循环中的while,但fin仍然是相同的值。因此while循环将debut减少为0for循环每次都会进入下一次迭代。

答案 1 :(得分:2)

简短回答:我怀疑你打算将你的while循环用于debut副本,而不是debut本身。< / p>


  • 我们假设debut == 3fin == 5
  • 我们执行for循环的第一次迭代,其中涉及while循环的完整演练。
  • 在while循环之后,我们有debut == 0fin == 5i == 12
  • 然后我们打印一些信息。
  • 但是,我们现在将再次迭代for循环。由于我们所做的工作,debut已减少到0,所以每次我们运行此代码时,在for循环迭代结束时,我们将得到{{1}这将导致for循环永不退出。

与代码一起显示内容可能会更有帮助...

debut == 0

就个人而言,我怀疑你正在寻找一组数字的迭代次数。这听起来像是一个使用功能的完美场所。我建议的代码看起来像这样。

for (;debut<=fin;debut++){
    // Let's assume we get here. We can assume some sane debut and fin values,
    // such as the 3 and 5 suggested above.

    int i=0;
    while (debut != 0) {
        // Stuff happens that makes debut go to zero.
    }

    // To get to this point, we __know__ that debut == 0.
    // We know this because that's the condition in the while loop.

    // Therefore, when we do the comparison in the for loop above for the
    // next iteration, it will succeed over and over again, because debut
    // has been changed to zero.

    printf("%d->%d\n",debut,i);
}

另外,只是为了注意事项,请注意在我最后给出的示例代码中,我删除了所有输入的scanf代码。它与您的实际问题无关,它减少了任何人需要扫描的代码总量,以了解您的问题所在。