Wenn ich Ihre Frage richtig verstehe, sollen Sie zunächst eine verknüpfte Liste bereitstellen. Da verknüpfte Listen kniffliger sind als das Lesen einer Datei, das Erzeugen von Zahlen usw., werde ich Ihnen dazu nur Hinweise geben.
Wenn Sie Ihre Schüler in ein einfaches Array packen müssten, wäre das ganz einfach, z. B. ein einfacher Schüler myArray[100] würde genügen. Das würde bedeuten, dass alle Ihre Schüler im gleichen Teil des Speichers untergebracht wären. Etwa so: (A)(B)(C). A, B und C sind drei Schüler, die nebeneinander gelagert sind. Das ist nicht praktisch, wenn man eine große Anzahl von Schülern hat, da man einen ausreichend großen Bereich im Speicher finden muss, um alles unterzubringen. Aus diesem Grund gibt es verknüpfte Listen : damit Sie Ihre Schüler überall im Speicher unterbringen können. Zum Beispiel : (A) (einige andere Daten) (B) (einige andere Daten) (C). So brauchen Sie keinen großen, einmaligen, freien Platz in Ihrem Speicher.
Es gibt jedoch ein Problem: Wenn Sie ein Array verwenden, ist es sehr einfach, Ihre Daten zu finden. Sie müssen nur den Anfang des Arrays kennen und dann die Nummer der gewünschten Daten ab dem ersten Element des Arrays berechnen. Das bedeutet, wenn Sie zum Beispiel myArray[4] eingeben.
Da Sie eine verknüpfte Liste verwenden werden, können Sie nicht berechnen, wo sich die Daten befinden, denn - und das ist die Idee der verknüpften Liste - sie könnten überall sein. Deshalb ist die Liste verlinkt : Sie müssen eine Möglichkeit bieten, von Daten zu Daten zu gelangen. Und Sie werden die besten Freunde von C-Programmierern verwenden: Zeiger.
Sie müssen also Ihre Struktur verbessern:
struct student{
char* lastName;
char* firstName;
int age;
float grade[3];
student* next
}
Und Sie brauchen eine sehr wichtige Variable: student* listStart. Dies ist das Äquivalent der "array"-Variablen, die Sie verwenden. Der Ort, an dem Sie beginnen müssen, wenn Sie auf Ihre Daten zugreifen wollen.
Was Sie nun tun müssen, ist im Wesentlichen:
- Lesen Sie die Datei, in der Ihre Schüler gespeichert sind.
- Verwenden Sie für jeden Schüler ein malloc(), um ihm genügend Speicherplatz zuzuweisen (lernen Sie, wie malloc() funktioniert, das ist sehr wichtig).
- Wenn dies der erste Schüler ist, zeigt listStart auf diesen Schüler.
- Füllen Sie für diesen neu angelegten Schüler alle Felder aus (Name, Noten, usw.). Füllen Sie den "next"-Zeiger des vorherigen Schülers mit der Adresse dieses Schülers. Der "next"-Zeiger des neu anzulegenden Schülers sollte "NULL" sein, falls er das Ende der Liste ist.
Na gut, das ist zunächst etwas verwirrend. Aber wenn Sie das schaffen, haben Sie etwas Nützliches gelernt, ohne dass wir Ihre Hausaufgaben für Sie machen. Viel Glück!