如何让输入重复时终止C++无限循环并完成指定年龄响应程序?
如何让循环在输入重复时停止?
要实现重复输入时停止循环,核心思路是记录上一次的输入内容,每次读取新输入后和上一次对比,若NAME和N完全重复则终止循环。同时还要处理输入结束(比如按下Ctrl+D或Ctrl+Z)的情况,避免无意义的死循环。
修改后的代码
#include <iostream> #include <string> using namespace std; int main() { string NAME, prev_NAME; int N, prev_N = -1; // 初始值设为-1,确保第一次输入不会触发重复判断 // 用cin的读取状态作为循环条件,输入结束或格式错误时自动退出 while (cin >> ws >> "My" >> "name" >> "is" >> NAME >> "and" >> "I" >> "am" >> N >> "years" >> "old.") { // 检查当前输入是否和上一次完全重复 if (!prev_NAME.empty() && NAME == prev_NAME && N == prev_N) { break; } // 按题目要求计算M并输出结果 if (N >= 10) { int division = N / 10; int M = N - division; cout << NAME << ", you look younger. I thought you were " << M << " years old." << endl; } // 更新上一次的输入记录 prev_NAME = NAME; prev_N = N; } return 0; }
关键细节说明
cin >> ws:跳过输入开头的空白字符(换行、空格等),保证每次读取的都是完整的目标格式行。- 初始值设置:
prev_N设为-1(题目规定N≥10),prev_NAME为空,第一次输入时不会触发重复判断。 - 重复判断逻辑:只有当
prev_NAME非空(即已经有过输入),且当前的NAME和N与上一次完全一致时,才执行break退出循环。 - 循环条件优化:把
while(true)改成while(cin >> ...),当输入流结束或格式不匹配时,cin会进入失败状态,自动终止循环,避免死循环。
内容的提问来源于stack exchange,提问作者okk
相关产品推荐
相关产品推荐

