我的程序是要把几个节点的数据,分类(按节点)存到不同硬盘文件中。然后再从不同文件中把各节点数据读出。写入数据时——从键盘输入各节点数据、读文件时数据在屏幕上显示。
程序察看结果不完全正确,不知道问题在哪,情况如下,请指教。
现在是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编辑过]