不知道为什么它会退出循环(在C中)

时间:2016-02-27 19:53:15

标签: c while-loop

我的代码一直运行直到用户输入" 0 0 0"停止该计划 但我的程序在一个循环后停止。我尝试在内部循环中添加一个打印,以查看值是什么,也许它们都被设置为0。

我的示例输入
5 10 6
5 3 4 2 4

输出
p = 4,s = 9,c = 6
p = 3,s = 6,c = 6
p = 2,s = 4,c = 6
p = 1,s = 0,c = 6
场景#1:MHR使用单一骑行线驾驶过山车#4。

我可以看到p,s和c都不是全0,所以我不知道为什么它会突破外部循环时它应该回到要求3个用户输入值

#include <stdio.h>
#include <stdlib.h>

int main(){

    int p,s,c,h,x=1,coaster;

    while(p != 0 && s != 0 && c != 0){
        //number of parties, single riders, capacity of ride
        scanf("%d%d%d",&p,&s,&c);
        //allocate memory
        int* parties = malloc(sizeof(int)*p);

        for(h=0;h<p;h++){
            //get size of each party in line
            scanf("%d",&parties[h]);
        }

        //find the faster line for each scenario
        int t = 0;
        while(p != 0 || s > 0){
            coaster = c - parties[t];
            s = s - coaster;
            p--;
            printf("p = %d, s = %d, c = %d\n",p,s,c);
            if(p == 0 && s != 0){
                printf("Scenario #%d: MHR rides coaster #%d, using the regular line.\n",x,t+1);
                break;
            }

            if(s <= 0 && p != 0){
                printf("Scenario #%d: MHR rides coaster #%d, using the single rider line.\n",x,t+1);
                break;
            }

            if(s <= 0 && p == 0){
                printf("Scenario #%d: MHR rides coaster #%d, using either line.\n",x,t+1);
                break;
            }

            t++;
        }

        x++;
        free(parties);

    }

return 0;
}

3 个答案:

答案 0 :(得分:0)

您正在使用的循环条件有效:p不为零且c不为零且s不为零。因此,当s为零时,条件为假并且循环退出。

您要查找的条件不是(p为零且c为零且s为零):

!(p == 0 && c == 0 && s == 0)

程序中还有另一个错误,在检查其值之前,您不要初始化pcs

答案 1 :(得分:0)

嗯,你有:

int p,s,c,h,x=1,coaster;
while(p != 0 && s != 0 && c != 0){

这不好。您检查psc的值,但它们是未初始化的变量

答案 2 :(得分:0)

如果您想要在一切都变为零时退出,请更改:

while(p != 0 && s != 0 && c != 0)

为:

while(!(p == 0 && s == 0 && c == 0))