怎么从一个文件中读入数据到结构体数组中

psnxtansini 2011-04-17 05:22:48
文件shuju.txt(分隔符为“制表符”)中数据如:
1 0 3 4 5
2 1 4 4 4
3 2 3 4 5

程序中定义了一个节点结构体
typedef struct
{
int no;
int q1;
int q2;
int q3;
int q4;
}NODE;

怎么用文件方式从shuju.txt中读入数据到NODE dian[3]这个数组中啊?
...全文
2533 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzm5656 2012-05-13
  • 打赏
  • 举报
回复
while(!feof(file))
{
NODE * node = (NODE *)callco(1, sizeof(NODE));
fgets(line , 255, file);
sscanf(line,""%d%d%d%d%d",&NODE->no,&NODE->q1,&NODE->q2,&NODE->q3,&NODE->q4)
/*对node处理*/
}
如何边读数据边给结构体中的每个成员赋值,读一行给结构中对应的成员赋一个值
xmu_才盛 2011-04-18
  • 打赏
  • 举报
回复
楼主看这个帖子, 里面两端代码远远超过你的需要,, 所以可以借鉴一下。。
http://topic.csdn.net/u/20110411/19/2d33c6ec-fe47-4ffd-8f27-44615a44af85.html
hongwenjun 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]

参考:
把结构用二进制方式写入文件,并读出来
[/Quote]

二进制 输入输出

  二进制文件会复杂一点, 但还是很简单的。首先你要注意我们不再使用插入和提取操作符(译者注:<< 和 >> 操作符). 你可以这么做,但它不会用二进制方式读写。你必须使用read() 和write() 方法读取和写入二进制文件. 创建一个二进制文件, 看下一行。

ofstream fout("file.dat", ios::binary);

  这会以二进制方式打开文件, 而不是默认的ASCII模式。首先从写入文件开始。函数write() 有两个参数。 第一个是指向对象的char类型的指针, 第二个是对象的大小(译者注:字节数)。 为了说明,看例子。

int number = 30; fout.write((char *)(&number), sizeof(number));

  第一个参数写做"(char *)(&number)". 这是把一个整型变量转为char *指针。如果你不理解,可以立刻翻阅C++的书籍,如果有必要的话。第二个参数写作"sizeof(number)". sizeof() 返回对象大小的字节数. 就是这样!

  二进制文件最好的地方是可以在一行把一个结构写入文件。 如果说,你的结构有12个不同的成员。 用ASCII?文件,你不得不每次一条的写入所有成员。 但二进制文件替你做好了。 看这个。

struct OBJECT { int number; char letter; } obj;
obj.number = 15;
obj.letter = ‘M’;
fout.write((char *)(&obj), sizeof(obj));

  这样就写入了整个结构! 接下来是输入. 输入也很简单,因为read()?函数的参数和 write()是完全一样的, 使用方法也相同。

ifstream fin("file.dat", ios::binary); fin.read((char *)(&obj), sizeof(obj));

  我不多解释用法, 因为它和write()是完全相同的。二进制文件比ASCII文件简单, 但有个缺点是无法用文本编辑器编辑。 接着, 我解释一下ifstream 和ofstream 对象的其他一些方法作为结束.
AnYidan 2011-04-18
  • 打赏
  • 举报
回复
找到你想读取的,放到你想放到的地方,

guohao_c 2011-04-18
  • 打赏
  • 举报
回复
你可以先用这个函数进行标准输入输出函数的重导向
freopen(),如,freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
这样你就可以直接用scanf()从"in.txt"中取得数据还有printf()把数据输出到"out.txt"里面了
也可以用fget();
screwzm 2011-04-18
  • 打赏
  • 举报
回复
是二进制还是文本数据啊?
按照lz的意思应该是文本形式的,我给一个方法试试:

FILE * file = fopen("shuju.txt","rb");

char line[256] = "\0";
while(!feof(file))
{
NODE * node = (NODE *)callco(1, sizeof(NODE));
fgets(line , 255, file);
sscanf(line,""%d%d%d%d%d",&NODE->no,&NODE->q1,&NODE->q2,&NODE->q3,&NODE->q4)
/*对node处理*/
}
fclose(file);
lovebaby999 2011-04-18
  • 打赏
  • 举报
回复
自己写程序处理把,每次读入一行,读入一行后,循环处理每个字符。
每一行,作为一个结构体,每遇到一个分隔符(本文为制表符),作为一个结构体的一个成员,依次赋值给结构体的成员。
luntianyi 2011-04-17
  • 打赏
  • 举报
回复
ifstream infile("shuju.txt",ios::binary);
infile.read(dian,sizeof(NODE));
pathuang68 2011-04-17
  • 打赏
  • 举报
回复
bargio_susie 2011-04-17
  • 打赏
  • 举报
回复
open
fgets
strtok

然后就是直接给结构体数组赋值了

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧