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

C++使用while循环读取文件时出现无限循环问题排查求助

问题根因

无限循环由两个常见的C++文件读取误区共同导致:

  • while(!inFile.eof()) 本身逻辑错误:eof() 只会在尝试读取内容、已经触碰文件末尾失败后才会返回真,先判断再读取的逻辑会导致最后一次读取失败后,仍会多执行一轮循环体
  • 混合使用 getline 和 >> 运算符未做读取校验:>> 读取完整数后会把行尾的换行符遗留在输入缓冲区,最后一轮读取完favNum之后,下一轮的 getline 会先读到空字符串,后续的 inFile >> age 读取失败会将流设置为fail状态,fail状态下所有读取操作都会直接失效,eof() 永远不会返回真,最终进入死循环。

修复方案

将读取操作直接放到while的判断条件中,每一步读取成功才会进入循环体执行,修复后代码如下:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string> // 原代码遗漏string头文件,补充避免编译问题

using namespace std;

int main()
{
    string name;
    int age, favNum;
    
    ifstream inFile;
    inFile.open("Trial.txt");
    if(inFile.fail())
    {
        cout << "No Such File!" << endl;
        exit(100);
    }
    
    cout << "The names are: " << endl;
    // 任意一步读取失败就直接退出循环
    while(getline(inFile, name) && (inFile >> age) && (inFile >> favNum))
    {
        cout << name << endl;
        cout << age << endl;
        cout << favNum << endl;
        // 忽略行尾剩余的换行符
        inFile.ignore(100, '\n');
    }
    
    inFile.close();
    return 0;
}

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:00