Ich soll ein Studenteninformationsmanagementsystem erstellen. Gibt es Probleme im Code? [geschlossen]C++

Programme in C++. Entwicklerforum
Guest
 Ich soll ein Studenteninformationsmanagementsystem erstellen. Gibt es Probleme im Code? [geschlossen]

Post by Guest »

Ergebnisse:
Image

Image

student.data. txt:

Code: Select all

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:

Code: Select all

#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

Code: Select all

#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");
}
}
Über „student.h“ definiere ich eine Struktur namens „Student“ und in „13.1.3.c“ möchte ich die Daten student.data.txt abrufen. Über „fseek“ erhalte ich die Anzahl der Schüler, und in „read(fp,index-1)“ möchte ich die Indexschülerdaten ausgeben, ich habe zum Arbeiten „fread“ und „if“ verwendet.
Mit dem folgenden Code möchte ich herausfinden, wo das Problem liegt. Ich verwende „feof“ und „ferror“, um herauszufinden, warum die Ausgabe von „fread“ „0“ und nicht „1“ ist.< /p>

Code: Select all

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");
}*/
}
Wenn ich 1 eingebe, ist das ausgegebene Ergebnis richtig. Aber wenn ich 2 oder 3 eingebe, lautet das Ergebnis „Das Dokument kann nicht geöffnet werden“.
Und ich versuche, kein „if“ zu verwenden, sondern direkt „stu.name stu“ auszugeben .gender stu.age“, das Ergebnis ist „luo 0 28“ und nicht „luo 1 18“ die richtige Antwort.
Der Code, den ich in Frage stellen möchte, ist der obige Code Im folgenden Code möchte ich herausfinden, wo das Problem liegt. Ich verwende „feof“ und „ferror“, um herauszufinden, warum die Ausgabe von „fread“ „0“ und nicht „1“ ist. Vielen Dank an alle, die Erklärung von zwei Codes, die ich zuvor geschrieben habe, vielleicht sehe ich nicht, dass sie verschwunden sind.
Die Plattform ist Windows.
Was ist das Problem in meinem Code?< /P>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post