Member 13734606 Ответов: 4

Правильно ли использовать else if?


Мой код показан ниже:

int main()
{
    int counter;
    int droll1;
    int droll2;
    int droll3;
    int droll4;
    int tot1;
    int tot2;
    char ans="";
    srand(time(NULL));
            droll1 = (rand()%6);
            droll2 = (rand()%6);
            droll1++;
            droll2++;
            tot1 = droll1 + droll2;
            printf("You rolled %d and %d the total is: ",droll1,droll2);
        printf(" %d ",tot1);
        printf("\nGuess if the next dice roll will be higher lower or the same (h/l/s) ");
        scanf("%c",&ans);
        droll3 = (rand()%6);
            droll4 = (rand()%6);
            droll3++;
            droll4++;
            tot2 = droll3 + droll4;
        if(ans='h'){
            if(tot2>tot1){
                printf("You guessed right. \n");
            }else{printf("wrong \n");}
        }else if(ans='l'){
            if(tot2<tot1){
                printf("You guessed right. \n");
            }else{printf("wrong \n"); }
        }else if(ans='s'){
            if(tot2==tot1){
                printf("You guessed right. \n");
            }else{printf("wrong \n"); }
            }
            printf("The new total is %d ",tot2);




    return 0;
}


Когда я его запускаю. независимо от того, что я ввожу, он работает так, как если бы вход был "h"

Что я уже пробовал:

Когда я удаляю else и использую три ifs, он все еще выполняет все три условия. ans = 'h','s' или 'l'.

4 Ответов

Рейтинг:
4

Patrice T

Этот ans='h' хранит 'h' в переменной ans.
Этот ans=='h' сравнивает 'h' с переменной ans.


Рейтинг:
34

Richard MacCutchan

Вы используете оператор присваивания, а не оператор равенства.

if(ans='h'){ // this means set ans to the value 'h' and if it is non-zero execute the following block of code

// you should use the proper equality operator == thus:
if(ans == 'h'){


Рейтинг:
21

CPallini

= является оператором присваивания.
Вы должны использовать == (равенство) реляционный оператор в вашем if выражения (см. C Операторы[^]).

Цитата:
если(ans='h')

Что, во-первых, присваивает 'h' к ans доблестно. Затем проверяет, является ли результат выражения либо истинным (non-zero) или ложь (zero). Так как результат выражения ans = 'h' является 'h' то есть 104, что в конечном итоге и происходит non-zero, то есть if блок всегда выполняется.


Рейтинг:
14

Jochen Arndt

В дополнение к решению Ричарда у меня есть совет, как избежать подобных ошибок. Переверните операнды:

if('h' == ans){
Если вы затем используете один знак равенства по ошибке, компилятор выдаст ошибку, потому что вы не можете присвоить значение константе.


Member 13734606

Поблагодарить каждого.
Йохен, я буду следовать твоему методу в дальнейшем.
Спасибо снова