Почему операторы if в моем коде не работают? - PullRequest
0 голосов
/ 19 января 2019

Оператор 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 голосов
/ 19 января 2019

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
 }

Не будет идти в другом, если первый оператор ifправда, это также не будет включено в else, независимо от того, что делает второе предложение if.

То, что вы хотите:

if(die[0] == die[1] && die[1] == die[2]) {
    pts += 1500;
else if ...

Разница в том, что всеусловия первого, если должны применяться, если только одно из условий не выполнено, остальное будет выполнено.Ваш собственный код будет добавлен в else, только если первое условие не выполнено, второе больше не учитывается, так как это еще одна конструкция if в новой области видимости первого if.else всегда относится только к if, которому он соответствует, а не к следующему if в объеме первого if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...