c语言读取文件里的数据时的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 02:27:13
我创建一个txt文件,直接用键盘敲入以下内容,想读取txt里的数字,txt文件里的内容是
1 3.4
2 4.8
3 9.0
6 7.2
程序是
#include "stdio.h"
#define SIZE 4
struct student
{
int num1;
char c1;
float num2;
char c2;
}stu[SIZE];
int main()
{
int i;
FILE *fp;

if((fp=fopen("data.txt","r"))==NULL)
{
printf("can not open the file");
return;
}
for(i=0;i<SIZE;i++)
{

fread(&stu[i],sizeof(struct student),1,fp);
printf("\n%d %f",stu[i].c1,stu[i].c2);

}
fclose(fp);
return 0;

}
为什么结果不对?输出的不是上面的数字
printf("\n%d %f",stu[i].c1,stu[i].c2); 是printf("\n%d %f",stu[i].num1,stu[i].num2);
仍然不对。
我是这样理解的,键盘敲入的时候,先敲一个整数,再敲一个空格,再敲一个实数,再敲回车,所以定义了上面的结构体用来读取每一行,不知道这样做对不对?
314499469,我试了你改的程

#include <stdio.h>
#define SIZE 4
struct student
{
int num1;
float num2;
}stu[SIZE];

main()
{
int i;
FILE *fp;
fp = fopen("data.txt", "rb") ;
for(i=0;i<SIZE;i++)
fread(&stu[i],sizeof(struct student),1,fp);
for(i=0;i<SIZE;i++)
{
printf("%4d %f",stu[i].num1,stu[i].num2);
printf("\n");
}
fclose(fp);
}

注意:程序已经调试过了,运行好好的,请把数据文件和程序文件放在同一个文件夹下.

printf("\n%d %f",stu[i].c1,stu[i].c2);
这样写是不对的,因为电脑不会帮你分配成员数据的大小。
fread(&stu[i],sizeof(struct student),1,fp);
当你用这句读取数据后,就要把读到的数据分配给struct student的成员,我给出参考程序。
fgets(str,80,fp);

memcpy(sell[i].dm,str,4);

memcpy(sell[i].mc,str+4,10);

memcpy(ch,str+14,4);ch[4]=0;

sell[i].dj=atoi(ch);

memcpy(ch,str+18,5);ch[5]=0;

sell[i].sl=atoi(ch