所以我生产的程序只能接受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;
}
}
答案 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;
}