c++怎么从一个文件中读数据到结构体中?
3个回答
展开全部
首先把目标明确,结构体是表达数据的存放方式,文件也有文件自己的数据格式化存放方式,要从文件读取数据到结构体中,必须要保证这个文件的数据格式化存放方式与内存中的结构体一致,这样才按照你所说的直接读取数据到结构体里面(不知道你是不是要表达这个意思?),其次我们要明确,文件在磁盘上属于外存,你所说的结构体通常是指数据在计算机的内存布局方式,要区分这两种情况。简单来说,你可以先定义一个结构体,然后你想要存的数据直接fwrite到磁盘上,存成二进制文件,然后再从磁盘上fread出来到结构体中(也要以二进制方式来读取,不然会出问题),这样是不是解决了所说的问题?下面是简单的示例代码:
#include <iostream>
#include <fstream>
struct data
{
int data_1;
char data_2;
};
int main(int argc, char *argv[])
{
data test = {4, 'A'};
data rdbuf = {0};
std::ofstream output_file("test.dat", std::ios_base::out | std::ios_base::binary);
if (!output_file.bad())
{
output_file << test.data_1 << test.data_2;
output_file.close();
}
else
{
std::cout << "can't create binary file\n";
return -1;
}
std::ifstream input_file("test.dat", std::ios_base::in | std::ios_base::binary);
if (!input_file.bad())
{
input_file >> rdbuf.data_1 >> rdbuf.data_2;
input_file.close();
std::cout << "rdbuf.data_1 = " << rdbuf.data_1 << ", rdbuf.data_2 = " << rdbuf.data_2 << std::endl;
}
else
{
std::cout << "can't read binary file\n";
return -1;
}
return 0;
}
程序的输出是:
rdbuf.data_1 = 4, rdbuf.data_2 = A
#include <iostream>
#include <fstream>
struct data
{
int data_1;
char data_2;
};
int main(int argc, char *argv[])
{
data test = {4, 'A'};
data rdbuf = {0};
std::ofstream output_file("test.dat", std::ios_base::out | std::ios_base::binary);
if (!output_file.bad())
{
output_file << test.data_1 << test.data_2;
output_file.close();
}
else
{
std::cout << "can't create binary file\n";
return -1;
}
std::ifstream input_file("test.dat", std::ios_base::in | std::ios_base::binary);
if (!input_file.bad())
{
input_file >> rdbuf.data_1 >> rdbuf.data_2;
input_file.close();
std::cout << "rdbuf.data_1 = " << rdbuf.data_1 << ", rdbuf.data_2 = " << rdbuf.data_2 << std::endl;
}
else
{
std::cout << "can't read binary file\n";
return -1;
}
return 0;
}
程序的输出是:
rdbuf.data_1 = 4, rdbuf.data_2 = A
展开全部
#include <iostream>
#include <fstream>
using namespace std;
struct student{
char name[20];
int age;
};
const int sz = 3;
int main()
{
student stu[sz];
ifstream stufile("stu.txt");
for (int i=0; i<sz; i++)
stufile >> stu[i].name >> stu[i].age;
stufile.close();
for (int i=0; i<sz; i++)
cout << stu[i].name << "\t" << stu[i].age << endl;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正常读啊,然后再放到结构体里。
或者重载 >> 也可以
或者重载 >> 也可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询