Мне предстоит создать систему управления информацией о студентах. Есть ли какие-то проблемы в коде? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Мне предстоит создать систему управления информацией о студентах. Есть ли какие-то проблемы в коде? [закрыто]

Сообщение Anonymous »

Результаты:
Изображение

Изображение

student.data.txt:

Код: Выделить всё

6C 69 00 00 00 00 00 00 30 8A 0E 27 F8 7F 00 00 00 00 00 00 01 00 00 00 13 00 00 00
78 69 65 00 08 00 00 00 00 00 00 00 1A 00 00 00 00 00 00 00 01 00 00 00 12 00 00 00
6C 75 6F 00 00 00 00 00 03 00 00 00 00 00 00 00 1E 16 40 00 01 00 00 00 12 00 00 00
student.h:

Код: Выделить всё

#ifndef __STUDENT__H__
#define __STUDENT__H__
const int STR_LEN = 20;
typedef struct __student{
char name[STR_LEN];
int gender;
int age;
}Student;
#endif
13.1.3.c

Код: Выделить всё

#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.
В чем проблема с моим кодом?

Подробнее здесь: https://stackoverflow.com/questions/793 ... trouble-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»