为什么我的代码中的if语句不起作用?

时间:2019-01-19 20:37:28

标签: c

测试数组中前两个数字的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);
 }

1 个答案:

答案 0 :(得分:2)

TL; DR:ifs子句不会完全考虑您嵌套的else。您需要正确使用and (&&)or (||)

我认为您对ifelse的工作方式有些误解。您的问题在于您不使用andor

此声明:

 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无关。