2 Stimmen

Einlesen einer Textdatei für eine verknüpfte Liste unter Verwendung von C

Ich habe eine Struktur, die als solche bezeichnet wird:

struct student{
   char*lastName;
   char*firstName;
   int age;
   float grade[3];
}

Wie kann ich eine Textdatei einlesen, die in ein Array von Schülerdatensätzen eingelesen werden soll? Das Alter aller Schüler sollte zufällig generiert werden und zwischen 18 und 35 liegen. Jeder Schüler hat 3 Textnoten von 0 bis 100.

2voto

Raveline Punkte 2612

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:

  1. Lesen Sie die Datei, in der Ihre Schüler gespeichert sind.
  2. Verwenden Sie für jeden Schüler ein malloc(), um ihm genügend Speicherplatz zuzuweisen (lernen Sie, wie malloc() funktioniert, das ist sehr wichtig).
  3. Wenn dies der erste Schüler ist, zeigt listStart auf diesen Schüler.
  4. 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!

0voto

SubniC Punkte 9087

Ich denke, Sie können damit beginnen:

0voto

Tom Punkte 1037

Okay, vielleicht kann ich helfen. Es sind jedoch weitere Informationen erforderlich. Was enthält die Textdatei? Wenn Sie ein zufällig generiertes Alter benötigen, ist das ganz einfach: Verwenden Sie einen Zufallszahlengenerator (Google) und definieren Sie die Grenzen, indem Sie ihn jedes Mal in einer Schleife aufrufen, um ein zufälliges Alter zu erhalten. Tun Sie das auch für die Noten. Was das Array betrifft, bin ich mir ziemlich sicher, dass Sie entweder eine Liste Ihrer Struktur erstellen können (c# ist wie List mylist = new List();) Oder Sie können ein Array Ihrer Struktur erstellen.

Wenn Sie eine Textdatei verwenden, die nur teilweise Daten enthält (z. B. nur Vor- und Nachnamen). Ich würde die Textdatei in einer Schleife einlesen und den Vor- und Nachnamen zuordnen. Dann in einer Schleife die Länge des Arrays/der Liste durchlaufen und jedes Mal eine Zufallszahl für Alter und Klasse aufrufen. Dann weisen Sie diese Position in der Schleife jeder Altersstufe zu. So student[i].age = *random gen method returned val.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X