C ++ - Elseif Elseif Возвращение - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь выучить C ++.Когда я пытаюсь сделать else, это не работает так, как я думаю.

Я перепробовал все, что мог придумать.

#include <iostream>
using namespace std;

int main()
{
    char name[50];
    int text;
    int text2;

    cout << "Enter 1-2: ";
    cin >> name;
    string s = name;

    text = atoi(s.c_str());
    if (text == 1) {
        cout << "You selected 1";
    }
    else if (text == 0) {
        cout << "You selected 0";
    }
    else if (text == 3) {
        cout << "You selected 3";
    }
    else {
        cout << "Invalid number";
    }
}

Если я ввожу цифры, этоработает правильно.Однако, если я введу что-то, что не является числом, например abcd, оно напечатает You selected 0, но я хочу, чтобы оно напечатало Invalid number.

1 Ответ

5 голосов
/ 18 июня 2019

Если вы передаете значение atoi, которое не может быть преобразовано, например, когда вы передаете «текст», возвращаемое значение atoi равно 0. Присылайте, например, atoi описание на cppreference.com:

Возвращаемое значение Целочисленное значение, соответствующее содержимому строки в случае успеха. Если преобразованное значение выходит за пределы соответствующего возвращаемый тип, возвращаемое значение не определено. Если преобразование невозможно выполнено, 0 возвращается.

Чтобы проверить ошибки преобразования, вы можете использовать stol, который выдает исключение при ошибках преобразования:

string invalid_num = "text, i.e. invalid number"; 
int num=0;
try{ 
    num = (int)stol(invalid_num); 
} 
catch(const std::invalid_argument){ 
    cerr << "Invalid argument" << "\n"; 
    num = -1;
} 

Выход:

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