игнорируются условия в C++

#include <iostream>
#include <cstdlib>


using namespace std;

int main(int argc, char const *argv[]) {


    int sel;

    cout<<"select :\n 1 - Yes\n 2 - No\n";

    cin>>sel;

    if(sel == '1') {

        cout<<"Hello world!";

        return 0;
    

    }else if (sel == '2') {

        string name;

        cout<<"Enter your name:";

        cin>>name;


        cout<<"Hey"<<name<<"Bye world!";

        return 0;
    } 

    return 0;
}

Вот пример обычной программы где ключевую роль играют условия , пример бональный , но думаю и так понятно. Дело в том , что компилятор как будто не видит условия , компиляция проходит успешно , однако когда программа запускается и я делаю выбор , ничего не происходит. Я использую компилятор g++ для компиляции C++ , в компиляторе gcc , которым я компилирую код на Си , никаких проблем нет . Если что работаю я в Linux , дистрибутив KDE NEON


Ответы (2 шт):

Автор решения: Aimon Z.

Замените символьные литералы на целочисленные:

#include <iostream>
#include <cstdlib>


using namespace std;

int main(int argc, char const *argv[]) {


    int sel;

    cout<<"select :\n 1 - Yes\n 2 - No\n";

    cin>>sel;

    if(sel == 1) { // Тут нужно было убрать '1' и поставить 1, и так далее.

        cout<<"Hello world!";

        return 0;
    

    }else if (sel == 2) {

        string name;

        cout<<"Enter your name:";

        cin>>name;


        cout<<"Hey"<<name<<"Bye world!";

        return 0;
    } 

    return 0;
}
→ Ссылка
Автор решения: milssky

Ничего не игнорируется, все работает абсолютно корректно. В начале вы объявили переменную sel типа int, считали в нее пользовательский ввод и в условии сравнивает с символом '1'. Его целочисленное значение 0x31 в шестнадцатеричной системе счисления, либо 49 в десятичной. Если вводить 1 или 2, то они явно не равны 49. Ради образовательных целей введите в программу 49 и увидите Hello world. Исправить можно, например, изменив тип переменной set на char. И вам нужно почитать о типах в c++ и способах их преобразования.

→ Ссылка