首页 > 解决方案 > C++ - 否则返回 Elseif

问题描述

我正在努力学习 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

标签: c++if-statement

解决方案


如果您传递一个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

推荐阅读