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