解决getLine函数跳过输入文件末尾空行的问题
解决getline忽略末尾空行的问题
问题出在getline的循环判断逻辑上:while (getline(inFile, currline))会在读取到EOF且未读取到任何字符时终止循环。如果你的test.txt最后一行是空行(无换行符结尾),getline尝试读取时会直接触发EOF,不会将空字符串存入currline,自然不会输出0。
要解决这个问题,我们可以调整循环逻辑,先执行读取操作,处理当前行后再判断是否终止循环:
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { ifstream inFile("test.txt"); if (!inFile.is_open()) { // 先检查文件是否成功打开 cerr << "无法打开文件" << endl; return 1; } string currline; while (true) { getline(inFile, currline); // 不管读取到的内容是否为空,先输出长度 cout << currline.length() << endl; // 检查是否到达文件末尾,是的话退出循环 if (inFile.eof()) { break; } } inFile.close(); return 0; }
逻辑说明
- 先检查文件是否成功打开,避免后续操作出错
- 使用无限循环,每次先调用
getline读取一行 - 直接输出当前行的长度(空行长度就是0)
- 读取后检查是否到达EOF,若是则终止循环
这样无论你的test.txt末尾空行是否有换行符,都能正确输出5和0。
内容的提问来源于stack exchange,提问作者Lamarcus Mcstudfin
相关产品推荐
相关产品推荐

