#include
#include"student.h"
void read(FILE *fp,int index);
int main(int argc,char const *argv[]){
FILE *fp = fopen("D:/tmp/student.data.txt","r");
if(fp){
fseek(fp,0L, SEEK_END);
long size = ftell(fp);
int number =size/sizeof(Student);
int index = 0;
printf("There is %d data,which do you want to see:",number);
scanf("%d",&index);
read(fp,index-1);
fclose(fp);
}
return 0;
}
void read(FILE *fp,int index){
fseek(fp,index*sizeof(Student), SEEK_SET);
Student stu;
fread(&stu,sizeof(Student),1,fp);
if(fread(&stu,sizeof(Student),1,fp)==1){
printf("The %d student:",index+1);
printf("\t name:%s\n",stu.name);
printf("\t gender:");
switch(stu.gender){
case 0:printf("boy\n");break;
case 1:printf("girl\n");break;
case 2:printf("other\n");break;
}
printf("\t年龄:%d\n",stu.age);
}else{
printf("can't open the document.\n");
}
}
Через «student.h» я определяю структуру под названием «Студент», а в «13.1.3.c» я хочу получить данные Student.data.txt, через «fseek» я получаю количество учеников, а в «read(fp,index-1)» я хочу вывести данные индексного ученика, для работы я использовал «fread» и «if».
void read(FILE *fp,int index){
fseek(fp,index*sizeof(Student), SEEK_SET);
Student stu;
fread(&stu,sizeof(Student),1,fp);
if(ferror(fp))
printf("there is an IO trouble\n");
else if(feof(fp))
printf("success to the document\n");
printf("%s\n",stu.name);
printf("%d\n",stu.gender);
printf("%d\n",stu.age);
printf("%d\n",fread(&stu,sizeof(Student),1,fp));
/* if(fread(&stu,sizeof(Student),1,fp)==1){
printf("The %d student:",index+1);
printf("\t name:%s\n",stu.name);
printf("\t gender:");
switch(stu.gender){
case 0:printf("boy\n");break;
case 1:printf("girl\n");break;
case 2:printf("other\n");break;
}
printf("\t age:%d\n",stu.age);
}else{
printf("can't open the document");
}*/
}
Когда я ввожу 1, результат получается правильный. Но когда я ввожу 2 или 3, в результате получается «невозможно открыть документ».
И я пытаюсь не использовать «if», прямой вывод «stu.name stu .gender stu.age", правильным ответом будет "luo 0 28", а не "luo 1 18".
Платформа — Windows.
В чем проблема с моим кодом?
void read(FILE *fp,int index){ fseek(fp,index*sizeof(Student), SEEK_SET); Student stu; fread(&stu,sizeof(Student),1,fp); if(fread(&stu,sizeof(Student),1,fp)==1){ printf("The %d student:",index+1); printf("\t name:%s\n",stu.name); printf("\t gender:"); switch(stu.gender){ case 0:printf("boy\n");break; case 1:printf("girl\n");break; case 2:printf("other\n");break; } printf("\t年龄:%d\n",stu.age); }else{ printf("can't open the document.\n"); } } [/code] Через «student.h» я определяю структуру под названием «Студент», а в «13.1.3.c» я хочу получить данные Student.data.txt, через «fseek» я получаю количество учеников, а в «read(fp,index-1)» я хочу вывести данные индексного ученика, для работы я использовал «fread» и «if». [code]void read(FILE *fp,int index){ fseek(fp,index*sizeof(Student), SEEK_SET); Student stu; fread(&stu,sizeof(Student),1,fp); if(ferror(fp)) printf("there is an IO trouble\n"); else if(feof(fp)) printf("success to the document\n"); printf("%s\n",stu.name); printf("%d\n",stu.gender); printf("%d\n",stu.age); printf("%d\n",fread(&stu,sizeof(Student),1,fp));
/* if(fread(&stu,sizeof(Student),1,fp)==1){ printf("The %d student:",index+1); printf("\t name:%s\n",stu.name); printf("\t gender:"); switch(stu.gender){ case 0:printf("boy\n");break; case 1:printf("girl\n");break; case 2:printf("other\n");break; } printf("\t age:%d\n",stu.age); }else{ printf("can't open the document"); }*/ } [/code] Когда я ввожу 1, результат получается правильный. Но когда я ввожу 2 или 3, в результате получается «невозможно открыть документ». И я пытаюсь не использовать «if», прямой вывод «stu.name stu .gender stu.age", правильным ответом будет "luo 0 28", а не "luo 1 18". Платформа — Windows. В чем проблема с моим кодом?