测试数组中前两个数字的if
语句不起作用,而else
则不起作用。
我正在创建一个小游戏,您可以将骰子掷三下,如果用户掷骰子三下而获得的分数相同,那么他将获得1500分。如果用户掷骰子并获得2个相同的数字,则将获得1200点积分;如果掷骰子并获得正数(例如1、2、3或3、4、5、6),则将获得1300积分。否则扣除600点。
本应测试前两个数字是否相同的if
语句不起作用,而else
则不起作用。我不知道该如何解决。
void Roll(){
int die[3] = {1, 1, 0}, i;
/*for(i = 0; i < 3; i++){
die[i] = 1 + rand() % 6;
}*/
printf("You rolled: \n");
for(i = 0; i < 3; i++)
printf("%d ", die[i]);
printf("\n");
checkPoints(die);
}
void checkPoints(int die[]){
if(die[0] == die[1]){
if(die[1] == die[2])
pts += 1500;
}
else if((die[0] + 1) == die[1]){
if((die[1] + 1) == die[2])
pts += 1300;
else if(die[0] == die[1]){
pts += 1200;
}
else if(die[0] == die[2]){
pts += 1200;
}
else if(die[1] == die[2]){
pts += 1200;
}
else{
pts -= 600;
}
showPoints();
}
void showPoints(){
printf("Total points: %d\n", pts);
}
答案 0 :(得分:2)
TL; DR:ifs
子句不会完全考虑您嵌套的else
。您需要正确使用and (&&)
和or (||)
我认为您对if
和else
的工作方式有些误解。您的问题在于您不使用and
和or
。
此声明:
if(die[0] == die[1]){
if(die[1] == die[2])
pts += 1500;
}
else if((die[0] + 1) == die[1]){
// do smth
}
不会进入else,如果第一个if语句为true,则无论第二个else
子句做什么,它也不会进入if
。
您想要的是:
if(die[0] == die[1] && die[1] == die[2]) {
pts += 1500;
else if ...
此处的区别在于,第一个条件的所有条件都必须适用,如果只有一个条件失败,则其他条件将被执行。如果第一个条件失败,则您自己的代码将进入else,否则将不再考虑第二个条件,因为它是第一个if
的新作用域中的另一个if
构造。 else
始终仅与它所对应的if
有关,而与第一个if
范围内的后续if
无关。