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

C++如何从文件读取数据向pair类型vector添加元素

故障根因

读取异常是getline与>>流运算符的换行处理逻辑冲突导致的:

  1. 首次循环时,getline正常读取第一行选手名存入player,>> overall正常读取第二行的整数总评值,因此前两条数据可以正确存入vector。
  2. 但>>读取整数时,不会消耗整数末尾紧跟的换行符,这个换行符会残留在流缓冲区中。第二次循环触发getline时,会直接命中这个残留换行符,读取到空字符串赋值给player;后续>> overall尝试读取内容时,会直接读到第三行的选手名字符串,与overall的整型类型不匹配,直接触发流的失败状态位,后续所有读取操作都会直接失败,overall会被置为0,这就是后续元素值全为0的原因。
修复代码

每次通过>>读取完整数后,手动清空当前行残留的换行符即可,注意需要引入<limits>头文件使用numeric_limits:

#include <limits> // 记得添加该头文件

// 核心读取逻辑
while (getline(players, player) && players >> overall) {
    pick_players.emplace_back(player, overall);
    // 忽略流中当前位置直到换行符的所有字符,同时消耗掉残留换行符
    players.ignore(numeric_limits<streamsize>::max(), '\n');
}
补充校验建议
  • 读取文件前先校验players.is_open(),确认文件正常打开后再执行读取逻辑,避免空流触发异常。
  • 如果文件末尾存在多余空行,可以在存入vector前加一层判断,过滤player为空的无效条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:27:45