读取.txt文件时控制台文本重复显示的原因排查
解决读取TXT文件时内容重复输出的问题
你的代码出现重复输出的核心原因是循环条件的判断时机错误:
- 原代码里
while (fs)仅检查流的当前状态,当std::getline读取到文件末尾失败时,流的状态才会变为无效,但此时循环已经进入,s中仍保留着上一次读取的内容,导致最后一行被重复输出。
修正后的代码(CreateFiles.cpp)
#include "CreateFiles.h" void createF() { std::fstream fs{ "C:\\Users\\bahge\\source\\repos\\Education\\Education\\myfile.txt" }; std::string s; while (std::getline(fs, s)) { std::cout << s << std::endl; } }
修正说明
把std::getline(fs, s)直接放到循环条件里,每次循环都会先尝试读取一行内容:
- 读取成功时,
getline返回流对象(会被转换为true),进入循环输出当前行; - 读取到文件末尾或读取失败时,
getline返回false,循环直接终止,彻底避免重复输出最后一行的问题。
内容的提问来源于stack exchange,提问作者BahiGoz
相关产品推荐
相关产品推荐

