当前位置: 代码迷 >> C语言 >> [求助]c 多个文件的分类读写问题,新手上路多多指教
  详细解决方案

[求助]c 多个文件的分类读写问题,新手上路多多指教

热度:111   发布时间:2007-04-05 14:55:15.0
[求助]c 多个文件的分类读写问题,新手上路多多指教

我的程序是要把几个节点的数据,分类(按节点)存到不同硬盘文件中。然后再从不同文件中把各节点数据读出。写入数据时――从键盘输入各节点数据、读文件时数据在屏幕上显示。

程序察看结果不完全正确,不知道问题在哪,情况如下,请指教。
现在是3个节点的数据都能输出,但最后输入的数据总是错的。
我为了验证程序:
输入
1 7 4 3 12 11 22 22 23 23 90
2 7 4 3 13 11 23 23 25 25 80
3 7 4 3 14 11 23 23 18 18 70
输出为
1 7 4 3 12 11 22 22 23 23 90
2 7 4 3 13 11 23 23 25 25 80
3 7 4 3 14 11 23 23 18 18 70
再输入一次
3 7 4 3 12 11 22 23 23 24 90
2 7 4 3 13 11 23 23 23 23 80
1 7 4 3 14 11 22 22 22 22 70
输出为
1 7 4 3 12 11 22 22 23 23 90 //和上一次数据一样,说明第三个数组nod[2]数据没写入
2 7 4 3 13 11 23 23 23 23 80
3 7 4 3 12 11 22 23 23 24 90

我在每次文件写入数据前还增加了文件的清空操作,结果也没改善。

试了好几次,都是最后一组输入数据(nod[2])有问题----无论它是哪个节点。

单步执行停在node_num=(int)nod[i].flag处,看了半天也不明白nod[2]为什么没有写入

文件写入数据时程序:
#include<stdio.h>
#define FORMAT "%d %d %d %d %d %d %d %d %d %d %d\n"
#define SIZE 3

struct node_type
{char year,month,day,hour,min,flag;
int temperature,humidity,carbondioxide,sulfurdioxide,pressure;
}nod[SIZE]; //节点数据以结构体形式写入,本程序只涉及3个节点

//有参数是为了与主程序中输入节点号对应。如查出节点为号1写入 文件sdfile1中
save_wrfile1(int c)
{FILE *fp1;

if((fp1=fopen("c:\\sdfile1","wb"))==NULL)
{printf("cannot open file\n");
return;
}
if(fwrite(&nod[c],sizeof(struct node_type),1,fp1)!=1)
printf("file write error\n");
fclose(fp1);
}

save_wrfile2(int a)
{FILE *fp2;

if((fp2=fopen("c:\sdfile2","wb"))==NULL)
{printf("cannot open file\n");
return;
}
if(fwrite(&nod[a],sizeof(struct node_type),1,fp2)!=1)
printf("file write error\n");
fclose(fp2);
}
save_wrfile3(int b)
{FILE *fp3;

if((fp3=fopen("c:\sdfile3","wb"))==NULL)
{printf("cannot open file\n");
return;
}
if(fwrite(&nod[b],sizeof(struct node_type),1,fp3)!=1)
printf("file write error\n");
fclose(fp3);
}

main()
{
int i;
int node_num;

for(i=0;i<SIZE;i++)
{ scanf(FORMAT,&nod[i].flag,&nod[i].year,&nod[i].month,&nod[i].day,&nod[i].hour,
&nod[i].min,&nod[i].temperature,&nod[i].humidity,
&nod[i].carbondioxide,&nod[i].sulfurdioxide,&nod[i].pressure);
node_num=(int)nod[i].flag; //看节点为几
switch(node_num)
{case 1: save_wrfile1(i);break; //调用不同的函数把数据按节点写道不同文件中
case 2: save_wrfile2(i);break;
case 3: save_wrfile3(i);break;
}
}
}
键盘输入:
节点号 日期等数据(不重要)
3 07 04 03 14 10 28 28 10 10 90
1 07 04 03 17 10 28 28 10 10 80
2 07 04 03 19 10 28 28 10 10 70

[此贴子已经被作者于2007-4-5 15:05:59编辑过]

搜索更多相关的解决方案: 节点  文件  数据  指教  

----------------解决方案--------------------------------------------------------

从文件读出数据,屏幕显示:
#include<stdio.h>
#define SIZE 3
#define FORMAT "%d %d %d %d %d %d %d %d %d %d %d\n"

struct node_type
{char year,month,day,hour,min,flag;
int temperature,humidity,carbondioxide,sulfurdioxide,pressure;
}nodd[SIZE]; //取出数据放入内存中的nodd结构体数组


main()
{ int i,nod_num;
FILE *fp1,*fp2,*fp3;

fp1=fopen("c:\sdfile1","rb");
fp2=fopen("c:\sdfile2","rb");
fp3=fopen("c:\sdfile3","rb");
fread(&nodd[0],sizeof(struct node_type),1,fp1); //把文件1的内容放入nodd[0]中
fread(&nodd[1],sizeof(struct node_type),1,fp2);
fread(&nodd[2],sizeof(struct node_type),1,fp3);

for(i=0;i<SIZE;i++)
{ printf(FORMAT,nodd[i].flag,nodd[i].year,nodd[i].month,nodd[i].day,
nodd[i].hour,nodd[i].min, nodd[i].temperature,
nodd[i].humidity,nodd[i].carbondioxide,
nodd[i].sulfurdioxide,nodd[i].pressure);
}
fclose(fp3);
fclose(fp1);
fclose(fp2);
}


----------------解决方案--------------------------------------------------------

大家给帮帮忙啊,急死了。不清楚问题在哪?


----------------解决方案--------------------------------------------------------
问题已经解决!!
----------------解决方案--------------------------------------------------------