int switch case的问题

时间:2016-10-16 00:10:52

标签: c++ switch-statement

所以我生产的程序只能接受1到5的数值,并且只使用switch语句,我必须将该数值转换为相应的罗马数字。我在使用int情况时遇到了麻烦,因为我已经在数字周围用双引号尝试了它,因为我确定单引号用于字符。我确保包含iostream并使用int = num;

#include <iostream>  //preprocessor directives are included

using namespace std;

int main() {
    int num = 0;

    cout << "Enter a number from 1 to 5: " << endl;
    cin >> num;
    switch (num) {
    case "1" :
        cout << "I" << endl;
        break;
    case "2" :
        cout << "II" << endl;
        break;
    case "3" :
        cout << "III" << endl;
        break;
    case "4" :
        cout << "IV" << endl;
        break;
    case "5" :
        cout << "V" << endl;
        break;
    }

}

2 个答案:

答案 0 :(得分:4)

您正在与字符串值进行比较,而不是int。删除每个case语句中的引号。

答案 1 :(得分:0)

无论输入的变量类型是什么,您都可以输入字符或字符串或任何东西来cin!因此,将字符串输入为整数将导致未知行为或无限循环。

抱歉,没有办法告诉cin您只想要1到5的数字或数字。

解决方案是:

使用异常处理:

#include <iostream>

int main() 
{
    int num = 0;
    std::cin.exceptions();

    try{
            std::cout << "Enter a number from 1 to 5: " << std::endl;
            std::cin >> num;
            if(std::cin.fail())
                throw "Bad input!";
            if(num > 5 || num < 1)
                throw "only numbers 1 throug 5 are allowed!";
    }
    catch(char* cp)
    {
        std::cout << cp << std::endl;
    }
    catch(...)
    {
        std::cout << "An error occuered sorry for the inconvenience!" << std::endl;
    }

    switch (num)
    {
        case 1 :
            std::cout << "I" << std::endl;
        break;
        case 2 :
            std::cout << "II" << std::endl;
        break;
        case 3 :
            std::cout << "III" << std::endl;
        break;
        case 4 :
            std::cout << "IV" << std::endl;
        break;
        case 5 :
            std::cout << "V" << std::endl;
        break;
        //default:
        // std::cout "Bad input! only numbers 1 through 5" << std::endl;
    }

    return 0;
}