从文件中读入数据到结构数组中的问题
下面的程序读取文件“readfile”,并将各部分数据读到一个结构体数组中。
可是所有的namea都会被最后一次读入的数据覆盖。请各位老大帮我解惑,是不是我在结构体中使用了一个char *?
文件的格式如下:
7
1
arden
2
jane
3
tom
第一行为文件行数,从第二列起id是一行int namea是一行string。顺序读入结构体数组sda中。
/*
* readfile.c read a file to a struct array
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 50
int tline; //行数
typedef struct {
int id;
char *namea;
}SD;
int main()
{
int n=1,k=0,j=0; //n表示文件行数,j表示结构体索引(从1开始)所以在赋值时使用j-1。
FILE *fp;
SD sda[MAX_NUM];
char string [50];
if((fp=fopen("c:\\readfile","r"))==NULL){
perror("sth wrong about open file");
exit(-1);
}
while(fgets(string,50,fp)!=NULL) {
if(n==1) {tline=atoi(string); n++;}
else{
j=n/2;
if ((n%2)==0){ //如果是偶数说明在读id
sda[j-1].id=atoi(string);
printf("j : %d \t n : %d \t sda[%d].id :%d\n",j,n,j-1,sda[j-1].id);
n++;
}
else //奇数是namea
{
sda[j-1].namea=string;
printf("j : %d \t n : %d \t sda[%d].namea :%s\n",j,n,j-1,sda[j-1].namea);
n++;
}
}//else
}
printf("the file has %d lines \n",tline);
printf("the %d student info list \n",(tline-1)/2);
for(k=0;k<=(tline-1)/2-1;k++)
{
printf("id : %d\tthe name :%s\n",sda[k].id,sda[k].namea);
}
system("pause");
return 0;
}