C++ 将结构体中的数据存入文件 哪位大侠棒棒我,小妹谢谢!急啊!好的话,再加分!

首先有个结构体:
struct ST
{
string name;
int age;
int score;
};
我要实现的功能是将在win32控制台应用程序中,分别对这三个对象赋值,然后再将其保存在一个文件中,如txt文件,后面再实现一个程序,读取文件中的值,并显示。
谢谢!最好给出完整的程序,我刚刚接触不久,底子差。
程序运行完后,依次得到各值,存入了一个txt文件中,如 :里面存的数据是这样 NAME 19 100
程序运行完了,再次打开后,怎样将这些数据赋值给一个对象呢?比如将NAME的属性设为19 100,然后用这些初始值进行后续的操作~ 简单的说 就是将结构体中的数据实时保存下来,下次再开始的时候,再从上次的数据中开始!

#include <fstream> // 文件流头文件.
#include <iostream>
using namespace std;

struct ST // 你的结构
{
string name;
int age;
int score;

};

ostream& operator <<(ostream& os, const ST& st){
os << st.name << " " << st.age << " " << st.score; // 输出流, 依次输出成员, 用空格隔开
return os;
}

istream& operator >>(istream& is, ST& st){
is >> st.name >> st.age >> st.score; // 输入流
return is;
}
// 现在就可以使用流了.

int main( ){
ofstream ofs("D:\\123.txt"); // ofstream 是C++文件输出流
ST st; // 一个临时变量

cout << "请输入 名字 年龄 分数" << endl;
cin >> st; // 读取用户的输入. 这里调用了前面定义的operator >>

ofs << st << endl; // 把st保存到文件中.
ofs.close(); // 关闭文件

ifstream ifs("D:\\123.txt"); // 还是打开刚才的文件, ifstream是文件输入流
ifs >> st; // 从文件中读取一个st数据.
cout << st << endl; // 把它输出到控制台

ifs.close(); // 关闭文件
return 0;
}

主要就在于开头的重载ST特定的 >> 和 <<追问

非常谢谢你!回答得很好!不过还要加个头文件 #include 不然会出错 ,我还想继续请教你如下问题:1.如果我想输入的不是一个人的资料,该怎么做?比如 要录入很多人的姓名 年龄 分数 2.读取文件的时候,怎样读取多个数据,比如将文件中的所有人的资料全都显示出来
希望你抽出时间帮我解答~

追答

使用容器来保存 多个数据, 容器可以是 数组, 也可以是STL容器.

#include
using namespace std;
// 定义略
int main(){
ST tmp; // 临时变量.
vector stVec; // 储存ST的容器;
ifstream ifs("D:\\32.txt"); // 文件流

while(ifs >> tmp) // 读取数据到tmp
stVec.push_back(tmp); // push_back函数添加tmp中数据到容器中

// 读取完 全部的数据后, 流 会把自己的状态设置为false, 所以while循环会自动停止.

for(int i = 0; i < stVec.size(); ++i)
cout << stVec[i] << endl; // 循环打印 全部数据到控制台

ofstream ofs("asd.txt"); // 文件输出流

for(int i = 0; i < stVec.size(); ++i)
ofs << stVec[i] << endl; // 循环输出 全部数据到ofs这个文件中

return 0;
}

C++文件流和 一般的标准IO流cout和cin用法几乎完全一样, 只是读取和输出的目标不是控制台, 而是文件.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-05
#include "stdafx.h"#include "stdio.h"
FILE *pStream;
void main()
{
// WriteData();
int b[10] = {0};
if( (pStream = fopen( "E:/data.txt", "r" )) != NULL )
{
fread(b, sizeof(int), 10, pStream);
fclose(pStream);
}

if( (pStream = fopen( "E:/data2.txt", "w" )) != NULL )
{
fwrite(b, sizeof(int), 10, pStream);
fclose(pStream);
}
}

void WriteData()
{
int a[10] = {1, 2, 4, 7, 8, 9, 10, 12, 13, 14};
if( (pStream = fopen( "E:/data.txt", "w" )) != NULL )
{
fwrite(a, sizeof(int), 10, pStream);
fclose(pStream);
}
}

刚给别人写的 你的和这一样,只是把数组换成结构
相似回答