如何设置C++ while循环条件以实现用户输入时持续运行、无输入回车时终止程序
解决你的While循环条件问题
嘿,我明白你想要实现的功能——用户输入内容就继续计算,直接回车就退出程序。你的原代码问题出在cin >> symbol的行为上:它会自动跳过所有空白字符(包括回车、空格、制表符),所以当用户直接按回车时,程序会一直卡在那里等待有效的非空白输入,根本不会触发退出逻辑。
我给你调整一下代码,既能实现你的需求,也能更健壮一些:
#include <iostream> #include <string> #include <sstream> // 用于字符串流处理 using namespace std; int main() { string input_line; // 循环读取整行输入,直到读取到空行 while (getline(cin, input_line)) { // 如果用户直接按回车,input_line是空字符串,退出循环 if (input_line.empty()) { break; } // 用字符串流拆分输入的内容 istringstream iss(input_line); string symbol; int a, b; // 尝试从流中读取运算符和两个数字 if (iss >> symbol >> a >> b) { // 处理各种运算 if (symbol == "+") { cout << a + b << endl; } else if (symbol == "-") { cout << a - b << endl; } else if (symbol == "*") { cout << a * b << endl; } else if (symbol == "/") { // 这里可以加个除数不为0的判断,避免崩溃 if (b != 0) { cout << a / b << endl; } else { cout << "错误:除数不能为0!" << endl; } } else if (symbol == "%") { // 同样,取余运算除数也不能为0 if (b != 0) { cout << a % b << endl; } else { cout << "错误:除数不能为0!" << endl; } } else { cout << "未知的运算符,请输入 +、-、*、/、% 中的一种!" << endl; } } else { // 输入格式不对的情况,比如只输入了运算符没输数字,或者输入了非数字内容 cout << "输入格式错误,请按照「运算符 数字1 数字2」的格式输入,直接回车退出!" << endl; } } cout << "程序已结束!" << endl; return 0; }
关键改动说明:
- 用
getline(cin, input_line)读取整行输入,这样能准确捕获用户直接按回车的空行。 - 检查
input_line.empty()来判断是否退出循环,这正是你想要的“直接回车结束”的逻辑。 - 使用
istringstream来拆分输入行,这样可以轻松提取运算符和数字,同时还能判断输入格式是否正确。 - 新增了除数不为0的判断和输入格式错误的提示,让程序更健壮,不会轻易崩溃。
你可以试试这个版本,输入比如+ 5 3会输出8,直接按回车就会退出程序啦!
内容的提问来源于stack exchange,提问作者wormpg
相关产品推荐
相关产品推荐

