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

C++从文件读取数据存入struct成员,现有写法是否需要用getline

问题解答

1. 现有代码的问题

你当前的写法无法通过编译,更无法完成读取需求:C++默认不会为自定义Person结构体提供流提取运算符>>的处理逻辑,你必须先重载该运算符,才能使用fin >> p1这类语法读取数据到结构体中。

2. 重载运算符后的读取效果

你可以按照如下逻辑重载>>运算符,适配你提供的文件格式:

#include <istream>
#include <string>
using namespace std;

struct Person
{
  string fName;
  string lName;
  int age;
};

istream& operator>>(istream& is, Person& p) {
    is >> p.fName >> p.lName >> p.age;
    return is;
}

这种情况下不需要使用getline就能正常读取你的ppl.log内容:

  • >>运算符默认会自动跳过所有空白分隔符(包括空格、换行符、制表符)
  • 你的文件每一行刚好是「无空格的名 + 无空格的姓 + 数字」的格式,和>>按空白分割读取的逻辑完全匹配,可以正确把每行的三个值赋值给结构体的对应字段。

3. 什么时候需要用getline

只有当你需要读取的单个字段本身包含空格时,才需要用到getline,比如你的文件里某行存储的是"Glenallen Mixon" 14(整个姓名是一个字段,中间带空格),这种情况>>运算符会把空格当成字段分隔符,读取结果不符合预期,就需要用getline先读取整行,再手动拆分字段内容。你当前的场景不需要这么做。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:06