将stu_list.txt中的内容读进结构体中我用fread读总出错,求助
我知道fread主要是用来读二进制流的数据块,但看了国外的书上说读文本流也是可以的。如果用文本流专用的fgets ,一次只能读一个字符,那不累死了?我做这个主要是做一个计算,数据很多。我的文本是先写好放在那的,只是用C来读这个TXT文件。结果是会有乱码,而且我明明定义了4次循环(只输出四行),但确输出了八行。大家可以运行下看看。谢谢
stu_list.txt:
Zhang 1001 19 room_101
Fun 1002 20 room_102
Tan 1003 21 room_103
Ling 1004 21 room_104
#include<stdio.h>
#define SIZE 4
struct student_type /*定义结构体数组*/
{char name[15];
int num;
int age;
char addr[100];
}stud[SIZE];
void main(void)
{int i,n;
FILE *fp; /*定义文件型指针变量*/
fp=fopen("stu_list.txt","r");/*打开文件。其中参数为要读的文件名(包含后缀名)加路径(若不加路径则只能放在.c文件所在的文件夹下)和打开方式*/
if(fp==NULL)/*确保文件指针不是空指针*/
{printf("不能打开该文件\n");
exit(0);/*关闭所有文件,终止正在执行的程序*/
}
for(i=0;i<SIZE;i++)
{fread(&stud[i],sizeof(stud[i]),1,fp);/*读数据块。其中&stud[i]位置是读入数据的存放地址,&stud[i]指结构体数组的某个结构体变量stud[i]的地址;sizeof位置是要读的字节数;1位置是要读多少个size字节的数据项;fp是前面已定义的文件型指针变量*/
printf("%s%d%d%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);/*输出结构体数组的每个元素(即结构体变量)中的每个成员的值*/
}
fclose(fp);
}
[ 本帖最后由 考拉的儿子 于 2011-5-19 18:00 编辑 ]