while循环退出而没有条件false

时间:2015-12-15 21:38:43

标签: c loops while-loop

我不明白为什么这段代码在tot等于或小于10时会打破循环,而当它超过10时则不会打断循环。

我不能相信我仍然无法管理这个基本的东西..请帮帮我!

do {
    tot = 0;
    system("CLS");

    printf("Inserisci 10 sfere tra rosse, blu e verdi");

    printf("\n\n Rosse : ");
    scanf(" %d" , &rosse);  
    tot += rosse;   
    for (i = 0; i < rosse; i++) {
        sfere[i] = 1;
    }

    printf("\n Verdi : ");
    scanf(" %d", &verdi);
    tot += verdi;
    for (i = 0; i < verdi; i++) {
        sfere[i+rosse] = 2;
    }

    printf("\n Blu : ");
    scanf(" %d", &blu);
    tot += blu;
    for (i = 0; i < blu; i++) {
        sfere[i+rosse+verdi] = 3;
    }       

    if (tot == 10) {
        break;
    }
}   while (true);

我尝试过这样做,但我得到了同样的结果..

while (tot != 10);

我强调我正在使用scanfprintf因为我的大学课程希望,让我们更好地了解记忆的运作方式,并确保将来不会出现错误。

4 个答案:

答案 0 :(得分:1)

您提供的代码只会在tot等于10

时中断while循环
if (tot == 10) {
    break;
}

第二个片段(下面的一个片段)的行为会相同但是这种方法更好,因为你明确写出循环时应该在tot等于10时结束(然后条件tot != 10将变为false,这将停止循环):

while (tot != 10);

答案 1 :(得分:1)

tot 变量正在获取任意数字。这可能会更好:

if(tot >= 10){
     break
}

除非您认为 tot 的具体原因始终为10.否则,如果 tot <,您将获得无限循环/ strong>最终不是10。

另一种方法是利用do {} while()循环:

 do{
      //code
 }while(tot >= 10)

答案 2 :(得分:0)

更改此

    // ...
    if (tot == 10) {
        break;
    }
} while (true);

到这个

   // ...
} while (tot < 10);

因为总数可能无法准确命中10,并且因为逻辑更清晰,更甜 - 请注意我如何使用所需条件来结束循环。

答案 3 :(得分:0)

我解决了!我不知道为什么我的循环永远不会因为循环外的一些代码而结束。 当我用srand(time(NULL))更改srand(time(&t))时,它就开始工作了! (之前声明time_t t;