Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不确定它为什么退出循环(在C中)_C_While Loop - Fatal编程技术网

不确定它为什么退出循环(在C中)

不确定它为什么退出循环(在C中),c,while-loop,C,While Loop,我有我的代码运行,直到用户输入“0”停止程序 但是我的程序在一个循环后停止。我尝试在内部循环中添加一个打印,以查看值是什么,可能它们都被设置为0 我的示例输入 5106 53424 输出 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 <

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

我的示例输入
5106
53424

输出
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;
}
#包括
#包括
int main(){
int p,s,c,h,x=1,过山车;
而(p!=0&&s!=0&&c!=0){
//参赛人数、单人骑乘人数、骑乘能力
scanf(“%d%d%d”、&p、&s、&c);
//分配内存
国际*缔约方=malloc(sizeof(国际)*p);
对于(h=0;h0){
过山车=c-缔约方[t];
s=s-过山车;
p--;
printf(“p=%d,s=%d,c=%d\n”,p,s,c);
如果(p==0&&s!=0){
printf(“场景#%d:MHR乘坐过山车#%d,使用常规行。\n”,x,t+1);
打破
}

如果(s您使用的循环条件有效:
p
不为零和
c
不为零和
s
不为零。因此,当
s
为零时,条件为假,循环退出

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

程序中还有另一个错误,在检查它们的值之前,您没有初始化
p
c
s

那么,您有:

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

这是不好的。您可以检查
p
s
c
的值,但它们是未初始化变量

如果要在所有变量都变为零时退出,请更改:

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


由于您尚未初始化p、s或c,如果它们最初恰好为零,程序将立即退出。此外,您的逻辑似乎错误-
(p!=0&&s!=0&&c!=0)
如果这些变量中的任何一个为零,则将为false。但是,如果用户不首先输入数字,我如何初始化它们?也许我应该将其更改为do while?将它们设置为一些伪值(例如-1)只是为了传递初始循环条件。该值将立即被进入循环的
scanf
覆盖。您也可以按照您的建议使用do-while构造。啊,谢谢,我用下面提供的@Pooya条件更改了逻辑谢谢!没有意识到我的条件与我实际想要的条件不相等o be.我认为我没有正确地执行逻辑运算符,对不起,但是你认为你能告诉我靠近末尾的if语句的逻辑是否正确吗?我正在尝试其他示例输入,它打印的是错误的ones@Hispazn:您想实现什么?我想进一步补充一点,OP可能希望在此场景中使用do..while循环。是的h我也意识到,要么只是改变做什么,要么初始化一些无关的变量
while(p != 0 && s != 0 && c != 0)
while(!(p == 0 && s == 0 && c == 0))