Lesen einer Daten-Datei und speichern in ein array von Strukturen
Bin ich zu Lesen versuchte, eine Daten-Datei und zum speichern der Informationen in ein array natürlich Strukturen (oder ein array von Zeigern auf Kurs-Strukturen). Diese Zuordnung erfordert die Aufrechterhaltung einer Datenbank mit einem array von Zeigern auf die studentischen Strukturen.
Ich bin immer ein segmentation fault, wenn ich versuche zu Scannen, die Daten in das array. Wie kann ich richtig lagern, die Informationen aus der Datei in das array?
#define SIZE 30
#define fieldLength 300
#define diskFile "diskFile.dat"
#define courseFile "course.dat"
struct student
{
char name[fieldLength];
int age[fieldLength];
char course1[fieldLength];
char course2[fieldLength];
char remarks[fieldLength];
}*sp[SIZE];
struct course
{
char name[fieldLength];
char number[fieldLength];
char instructor[fieldLength];
char date[fieldLength];
char starting[fieldLength];
char ending[fieldLength];
char location[fieldLength];
};
int main(int argc, char *argv[])
{
int i, count;
struct course course_arr[SIZE]; //an array of ten structs
FILE * in; /*FILE pointer to do the stream IO*/
in = fopen(courseFile, "r+");
count = 0;
while ((fscanf(in, "%s %s %s %s %s %s %s",
&course_arr[count].name,
&course_arr[count].number,
&course_arr[count].instructor,
&course_arr[count].date,
&course_arr[count].starting,
&course_arr[count].ending,
&course_arr[count].location)) != EOF)
{
count++;
}
/* print the menu */
printf("\n-----------------------------------------------------------------\n");
printf("|\t%-20s","(N)ew record");
printf("%-20s","(U)pdate record");
printf("Swa(p) records\t|\n");
printf("|\t%-20s","(S)ort database");
printf("%-20s","(C)lear database");
printf("(D)isplay db\t|\n");
printf("|\t%-20s","(L)oad disk");
printf("%-20s","(W)rite disk");
printf("(E)mpty disk\t|\n");
printf("|\t%-20s", "(V)iew courses");
printf("%-20s","(R)emove record");
printf("(Q)uit \t|\n");
printf("-----------------------------------------------------------------\n");
printf("choose one: ");
- Puffer-überlauf ist eine Reale Sache. Lesen Sie über es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Routine
fscanf
kehrt nie zurückEOF
.Test
fscanf
werden weniger als die Anzahl der erwarteten Felder:fscanf
zurückEOF
finden Sie 7.21.6.2 ad 16 der C11-standard.ich denke, dass es besser ist, mit zu arbeiten
while(getline(string_variable,,)!=EOF).(Blick auf die Netto-auf die argumentsto setzen in der getline)
Arbeiten Sie dann mit der string_variable. Blick auf das format, dass die Daten in der txt-Datei. z.B.: name(Leerzeichen)Rufnummer(Leerzeichen)Lehrer(leer) - Datum(leer)starten(leer)endinglocation
Die Suche nach Leerstellen in den string_variable. wenn Sie sehen, die erste leere Kopie der Teilstring von position 1 zu position leer-1, um die course_arr[count].variable name.löschen Sie dann den Teilstring von position 1 zu position leer. Schauen Sie wieder für die erste leer ist, und speichern des Teilstrings course_arr[count].Zahl und so weiter.
Sorry für mein Deutsch hoffe, dass u bekam die Bedeutung
Sollten Sie Locker alle
&
s in derfscanf
nennen. Diechar
arrays sind bereits vergangen, als Zeiger. Wenn Sie möchten, verwendet die-Wall
option aufgcc
(oder eine ähnliche option für andere compiler), wird es Sie warnen, für diese als gut.Haben Sie überprüft, die Datei, was Sie Lesen vorhanden ist oder nicht.
hinzufügen Balg
Ich denke, es könnte das problem sein.