You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:35:20