C++中exit()正确用法及输入exit无法正常退出问题求助
问题原因及解决方案
核心问题
你用float类型变量接收输入,当输入"exit"时,cin无法将字符串转换为浮点数,提取操作直接失败:
- 失败后,
a会被自动设为0,to_string(a)得到的是"0.000000",和"exit"完全不匹配,所以退出逻辑根本不会触发。 - 同时
cin会进入失败状态,后续所有输入操作(比如cin >> b)都会直接跳过,程序会直接执行加法逻辑,最终输出异常结果。
修复方案
正确的思路是先把输入读取为字符串,判断是否是退出指令;如果是有效数字,再转换为浮点数:
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { cout << "Addition. Enter 'exit' to exit." << endl; const string exit_cmd = "exit"; string input; float a, b, c; // 处理第一个数字输入 cout << "First number: "; cin >> input; if (input == exit_cmd) { cout << "Exiting..."; return 0; // main函数用return代替exit更符合规范 } // 尝试将字符串转为浮点数 stringstream ss(input); if (!(ss >> a)) { cout << "Invalid number input!" << endl; return 1; } // 处理第二个数字输入 cout << "Second number: "; cin >> input; if (input == exit_cmd) { cout << "Exiting..."; return 0; } ss.clear(); // 重置stringstream状态 ss.str(input); if (!(ss >> b)) { cout << "Invalid number input!" << endl; return 1; } c = a + b; cout << "The sum is " << c << "." << endl; return 0; }
额外说明
- 在
main函数中用return 0代替exit(0)更符合C++函数的返回语义,两者最终效果一致。 - 新增了输入有效性校验,避免用户输入非数字、非exit的内容导致程序异常。
内容的提问来源于stack exchange,提问作者Roman Rodriguez
相关产品推荐
相关产品推荐

