C++中能否使用string类型配合switch语句?编译异常求助
问题分析与解决:string类型配合switch语句引发的编译错误
你遇到的问题其实很典型——C++里的switch语句对控制表达式的类型有严格要求,咱们先拆解你的代码问题出在哪:
错误根源
你的代码里用string day接收用户输入,然后直接把这个string对象放到switch里当判断条件,但C++标准明确规定:switch的控制表达式必须是整数类型(比如int、char、枚举类型等),std::string不属于这类,所以编译器会直接报错,程序自然没法正常运行。
另外你的原代码还漏了<string>头文件,虽然部分编译器可能会隐式包含,但这是不符合规范的潜在问题。
修复方案
有两种简单的修复方式,你可以根据需求选择:
方案1:把输入类型改成int(最直接高效)
既然你要接收的是1-7的数字,直接用int类型存储输入就行,这样switch就能正常工作。修正后的代码如下:
#include <iostream> using namespace std; int main() { int day; // 替换string为int类型 cout << "Enter The Number of the Day between 1 to 7 "; cin >> day; switch (day) { case 1: cout << "Monday"; break; case 2: cout << "Tuesday"; break; case 3: cout << "Wednesday"; break; case 4: cout << "Thursday"; break; case 5: cout << "Friday"; break; case 6: cout << "Saturday"; break; case 7: cout << "Sunday"; break; default: cout << "Attention, you have not chosen the Valid number to Identify weekly days from 1 to 7. Try again!" << endl; } return 0; // 加上main函数的返回值,符合C++标准规范 }
方案2:坚持用string接收输入(转成int再用switch)
要是你因为某些场景必须用string存储输入,可以先把string转换成int,再传入switch,同时还要处理输入非数字的异常情况:
#include <iostream> #include <string> // 必须包含string头文件 using namespace std; int main() { string dayStr; cout << "Enter The Number of the Day between 1 to 7 "; cin >> dayStr; try { int day = stoi(dayStr); // 将string转换为int switch (day) { case 1: cout << "Monday"; break; case 2: cout << "Tuesday"; break; case 3: cout << "Wednesday"; break; case 4: cout << "Thursday"; break; case 5: cout << "Friday"; break; case 6: cout << "Saturday"; break; case 7: cout << "Sunday"; break; default: cout << "Attention, you have not chosen the Valid number to Identify weekly days from 1 to 7. Try again!" << endl; } } catch (const invalid_argument& e) { cout << "Please enter a valid numeric value!" << endl; } catch (const out_of_range& e) { cout << "Number is out of valid range (1-7)!" << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Саша
相关产品推荐
相关产品推荐

