VS2022中C++重复单词检测程序执行异常及相关问题咨询
C++重复单词检测程序问题解答及书籍推荐
问题背景
我正在从Stroustrup的《C++程序设计原理与实践》一书学习编程,在Visual Studio 2022中运行检测重复单词的程序时遇到问题。
程序代码如下:
#include <iostream> int main() { std::string previous = " "; std::string current; while (std::cin>>current){ if (previous == current) std::cout << "Repititive word: " << current << '\n'; } }
输入如"the cat cat jumped"这类句子后,按下Ctrl+Z并回车,程序无执行反应。了解到cmd.exe是逐行发送文本,但不知如何逐个输入单词。我还尝试修改循环条件为while (cin>>current EOF),但也无效;若直接按Ctrl+Z回车,程序会显示执行成功。想咨询:代码中应如何正确输入EOF字符?另外,能否推荐现代编程相关书籍?
一、EOF输入与代码修正
1. 核心代码问题
程序无输出的根本原因不是EOF输入,而是未更新previous变量。每次循环结束后,需要将当前读取的current赋值给previous,否则previous永远是初始的空格,无法匹配到重复单词。修正后的代码:
#include <iostream> int main() { std::string previous = " "; std::string current; while (std::cin >> current){ if (previous == current) std::cout << "Repetitive word: " << current << '\n'; previous = current; // 新增:更新上一个单词的记录 } }
2. Windows下正确输入EOF的方式
在cmd.exe中,输入流程应为:
- 输入目标文本(比如
the cat cat jumped),按下回车提交当前行; - 单独按下
Ctrl+Z,再按回车,此时系统会向程序发送EOF信号,循环终止并处理所有输入。
3. 关于错误的循环条件
while (cin>>current EOF)是语法错误,原代码的while (std::cin >> current)是正确写法——这个表达式会在读取到EOF或输入失败时自动终止循环。
二、现代编程书籍推荐
C++方向
- 《C++ Primer(第5版)》:覆盖C11及后续核心特性,是系统学习C的权威教材,适合从基础到进阶。
- 《Effective Modern C++》:聚焦C11/14/17的现代特性,提供大量实用的编码技巧,帮助写出高效、符合现代风格的C代码。
通用编程与基础
- 《代码整洁之道》:专注于代码可读性与可维护性,培养良好的编程习惯,适合所有开发者。
- 《算法导论》:深入讲解算法设计与分析,是计算机科学领域的经典,夯实算法基础必备。
其他语言拓展
- 《Python编程:从入门到实践》:Python入门优质书籍,理论结合实践,适合快速掌握Python并完成实际项目。
内容的提问来源于stack exchange,提问作者Eldar R
相关产品推荐
相关产品推荐

