C ++-其他返回Elseif

时间:2019-06-18 06:07:46

标签: c++ if-statement

我正在尝试学习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 个答案:

答案 0 :(得分:5)

如果您将无法转换的值传递给atoi,例如当您传递“文本”时,atoi的返回值为0。例如,在cppreference.com上提供atoi描述:

  

返回值成功时str的内容所对应的整数值。如果转换后的值超出相应范围   返回类型,返回值是不确定的。 如果无法进行转化,   执行,将返回``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