c++读取txt文件到结构体 20

txt中内容如下:249JeffGordon680LarryFine1044PearlJam1044JeffAment1079BobHoskins1296BoydGain... txt中内容如下:
249 Jeff Gordon
680 Larry Fine
1044 Pearl Jam
1044 Jeff Ament
1079 Bob Hoskins
1296 Boyd Gaines
1554 Mickey Rourke
第一列为ID,第二列为name
展开
 我来答
AA5956
2015-08-03 · TA获得超过1868个赞
知道小有建树答主
回答量:705
采纳率:72%
帮助的人:468万
展开全部
  1. 需要用到fstream头文件

  2. 用ifstream进行读取

  3. 读取到结构体里面主要是每次读取对应结构体变量长度的数据到该结构体里面

具体参考下面demo

strcut stockType
{
string personAddress;
string personCity;
string personState;
int personZIP;
};

void addressType :: getData()
{
ifstream infile;

int index;

string inputFile;

stockType addressTypeList[NO_OF_PERSON];

cout<<"Enter the file path: ";
cin>>inputFile;    //输入txt文件路径
cout<<endl;

infile(inputFile.c_str());    //infile按照指定路径读取txt文件

for(index = 0; index < NO_OF_PERSON; index++)//读取txt文件至struct
{
infile>>addressTypeList[index].personAddress;
infile>>addressTypeList[index].personCity;
infile>>addressTypeList[index].personState;
infile>>addressTypeList[index].personZIP;
}
}
xiaohuh421
2010-05-19 · TA获得超过904个赞
知道小有建树答主
回答量:897
采纳率:0%
帮助的人:372万
展开全部
不是 紧凑存储 的话不能直接读取到结构体中,要读取文件后进行处理
像你这种文本的,建议改成以下形式,就更方便读取
249,Jeff,Gordon,
680,Larry,Fine,

FILE *pFile=fopen("c:\\aaaaa.txt","rb");
CStdioFile csFile(pFile);
CString Str;
char buf1[10]={0};
char buf2[20]={0};
char buf3[20]={0};
int id=0;
while(csFile.ReadString(Str))
{
sscanf("%[^,],%[^,],%[^,],",buf1,buf2,buf3);
id=atoi(buf1);
//把id,bu2,buf3数据存入结构体
}

如果是用紧凑存储的话名字空间要定长
246Jeff Gordon
680Larry Fine

类似这样的话可以直接读取
其它同上,只是while中处理不一样
USER info;//假如USER是结构体
while(csFile.ReadString(Str))
{
memcpy(&info,Str.GetBuffer(0),Str.GetLength());
//保存info结构体到你的数组结构中
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
v罙愛謀女孓v
2010-05-19 · TA获得超过519个赞
知道答主
回答量:135
采纳率:0%
帮助的人:206万
展开全部
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct ID{
int x;
string y;
};

int main()
{

ofstream fout("e:/测试.dat",ios::out);
if(!fout)
{
cout<<"Cannot open output file.\n";
return 1;
}
fout<<"249,Jeff Gordon \n"
"680,Larry Fine \n"
"1044,Pearl Jam \n"
"1044,Jeff Ament \n"
"1079,Bob Hoskins \n"
"1296,Boyd Gaines \n"
"1554,Mickey Rourke \n";

fout.close();

ifstream fin("e:/测试.dat",ios::in);

if(!fin)
{
cout<<"Cannot open input file.\n";
return 1;
}
vector<ID> v;
int i=0;
ID d1;

while (fin)
{
fin>>d1.x;
getline(fin,d1.y);
v.push_back(d1);
i++;
}

for(i=0;i<v.size()-1;i++)
{
cout<<v[i].x<<" "<<v[i].y<<endl;
}
fin.close();
return 0;
}

调试通过。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式