我的代码一直运行直到用户输入" 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;
}
答案 0 :(得分:0)
您正在使用的循环条件有效:p
不为零且c
不为零且s
不为零。因此,当s
为零时,条件为假并且循环退出。
您要查找的条件不是(p
为零且c
为零且s
为零):
!(p == 0 && c == 0 && s == 0)
程序中还有另一个错误,在检查其值之前,您不要初始化p
,c
或s
。
答案 1 :(得分:0)
嗯,你有:
int p,s,c,h,x=1,coaster;
while(p != 0 && s != 0 && c != 0){
这不好。您检查p
,s
和c
的值,但它们是未初始化的变量!
答案 2 :(得分:0)
如果您想要在一切都变为零时退出,请更改:
while(p != 0 && s != 0 && c != 0)
为:
while(!(p == 0 && s == 0 && c == 0))