如何实现C++程序在空cin输入时退出终端?
解决空输入时退出终端的问题
问题核心在于你使用的 cin >> input 会自动跳过所有空白字符(包括换行符),所以当你直接按下回车键时,程序不会读取到任何内容,而是会一直等待非空白输入,导致你的空行判断逻辑根本无法触发。
正确实现方式
改用 getline(cin, input) 读取整行输入,它会读取包括换行符在内的整行内容,当直接按回车时会得到空字符串,此时就能触发退出逻辑。同时可以结合 getline 的返回值处理EOF(比如用户按下Ctrl+D/Ctrl+Z)的情况。
修改后的核心代码片段:
int main(int argc, char const* argv[]) { set<string> words; if (argc == 1){ string input; // 读取整行,同时判断是否读取成功(处理EOF) while (getline(cin, input)) { // 检测空行,直接退出循环 if (input.empty()) { break; } // 此处添加业务逻辑,比如将输入加入集合 words.insert(input); } } // 后续代码... return 0; }
之前判断无效的原因
cin >> input会跳过空白字符,直接按回车时input不会被赋值,自然触发不了input.empty()input == "\n"永远不成立,因为cin >> input不会把换行符读取到input中if (input == "" || "\n")属于语法逻辑错误,等价于if ((input == "") || true),但受限于cin的特性,这种情况根本不会出现
内容的提问来源于stack exchange,提问作者Fu11Stacks
相关产品推荐
相关产品推荐

