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

C++处理8列文本文件忽略前6列输出时生成空白文件问题求解

C++读取文本文件忽略前6列仅保留最后2列问题修复

核心问题排查

  • 命名空间缺失:标准库的ofstream、cout、endl都属于std命名空间,代码中没有加std::前缀也没有导入命名空间,会直接编译失败,若运行的是之前编译的错误版本就会生成空白文件。
  • 循环前多执行了一次读取操作:进入while循环前你已经读取了第一行的8个值,但没有存入vector,第一行数据直接丢失;如果输入文件只有1行数据,vector就会是空的,最终输出空白文件。
  • 缺少输出文件打开成功判断:无法排查路径权限、输出路径不存在等写入异常问题。

修正后代码

先缓存再写入版本

#include <iostream>
#include <fstream>
#include <vector>
#include <utility>

void allNuclei()
{
  std::ifstream in("Zr/Zr_0.txt");
  if (!in.is_open())
  {
    std::cout << "输入文件打开失败" << std::endl;
    return;
  }

  int p1, p2, p3, p4, p5, p6, A, N;
  std::vector<std::pair<int, int>> vec;
  // 移除了循环外多余的读取操作,直接在循环条件中完成读取判断
  while(in >> p1 >> p2 >> p3 >> p4 >> p5 >> p6 >> A >> N){
    vec.push_back(std::make_pair(A, N));
  }
  in.close();

  std::ofstream m("All_Zr.txt");
  if (!m.is_open())
  {
    std::cout << "输出文件打开失败" << std::endl;
    return;
  }
  std::cout << "starting fill" << std::endl;
  for(size_t i = 0; i < vec.size(); i++){
    m << vec[i].first << " " << vec[i].second << std::endl;
  }
  m.close();
}

边读边写优化版本(大文件适用,无需额外缓存)

#include <iostream>
#include <fstream>

void allNuclei()
{
  std::ifstream in("Zr/Zr_0.txt");
  if (!in.is_open())
  {
    std::cout << "输入文件打开失败" << std::endl;
    return;
  }
  std::ofstream m("All_Zr.txt");
  if (!m.is_open())
  {
    std::cout << "输出文件打开失败" << std::endl;
    return;
  }
  int p1, p2, p3, p4, p5, p6, A, N;
  while(in >> p1 >> p2 >> p3 >> p4 >> p5 >> p6 >> A >> N){
    m << A << " " << N << std::endl;
  }
  in.close();
  m.close();
  std::cout << "处理完成" << std::endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:00