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

C++嵌套while循环内层仅执行一次,如何实现输入文件每行追加所有后缀输出

问题原因分析
  • 输入文件流状态错误:第一次内层while循环执行完成后,inFile的读取指针已经走到文件末尾,同时流会被标记eof(文件结束)和fail(读取失败)状态,后续再调用getline读取inFile会直接返回false,内层循环不会触发。
  • 文件提前关闭:你在外层循环末尾直接关闭了inFile和outFile,第二次进入外层循环时,两个文件都处于关闭状态,既无法读取输入内容,也无法写入输出内容。
  • 文件打开判断逻辑错误:当前判断条件用的是&&,仅当两个文件同时打开失败才会报错,只要有一个文件打开成功程序就会继续执行,不符合预期,应改为||。
修复方案
  1. 移除外层循环内的inFile.close()和outFile.close(),outFile全程保持打开状态,程序执行结束前关闭即可。
  2. 每次处理完一个后缀后,先调用inFile.clear()清除流的错误标记,再调用inFile.seekg(0)将读取指针重置到文件开头,保证下一轮外层循环可以从头读取输入文件的所有内容。
  3. 修正文件打开的判断条件,将&&改为||。
修正后代码
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
    string line_in{};
    string line_suf{};
    string line_out{};
    ifstream inFile{};
    ofstream outFile{"outfile.txt"};
    ifstream suffix{};

    inFile.open("combined_test.txt");
    suffix.open("suffixes.txt");

    if (!inFile.is_open() || !suffix.is_open()) {
        perror("Error open");
        exit(EXIT_FAILURE);
    }

    while (getline(suffix, line_suf)) {
        while (getline(inFile, line_in))
        {
            line_out = line_in + line_suf;
            outFile << line_out << endl;
        }
        // 重置输入文件流状态和指针位置
        inFile.clear();
        inFile.seekg(0);
    }
    // 统一关闭文件
    inFile.close();
    outFile.close();
    suffix.close();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:00:01