Struct Array Durchsuchen
-
Hi Leute,
ich habe folgendes Problem, ich habe ein Programm geschrieben das Studentendaten in ein Array speichert. Dieses will ich nun dahingehend durchsuchen, dass wenn ich Name und Vorname eingebe, die Matrikel Nummer ausgegeben wird bzw. wenn ich die Matrikel Nummer eingebe Name und Vorname ausgeben wird. Nun stehe ich etwas auf dem Schlauch da ich nicht so recht weiß wie vorgehen soll...
Hier einmal das Programm
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct student
{
int matrikelnr;
char vorname[9];
char nachname[13];
};
struct student prak_gr[100];void main()
{
int n=0;
do
{
n++;
printf("Geben sie den Vornamen ein: ");
scanf("%s", &prak_gr[n].vorname);
printf("Geben sie den Nachnamen ein: ");
scanf("%s", &prak_gr[n].nachname);
printf("Geben sie die Matrikel Nummer in: ");
scanf("%d", &prak_gr[n].matrikelnr);}while(prak_gr[n].matrikelnr != -1);
for(int i=1; i<=n; i++)
{
printf("\n%s %s hat die Matrikelnummer %d \n", prak_gr[i].vorname , prak_gr[i].nachname, prak_gr[i].matrikelnr);
}system("Pause");
}Hier der Ansatz:
char vn, nn;
char vorname, nachname;
printf("Geben sie den zu Suchenden Vornamen und Namen ein: ");
scanf("%s" "%s" ,&vn ,&nn);
vn = vorname;
nn = nachname;while(vn == vorname && nn == nachname)
for(
Und da hörts schon auf
Hatte erst versucht es über linked lists zu machen, nur wollen mir diese einfach nicht so recht einleuchtenÜber jeden Lösungsansatz wäre ich sehr Dankbar!
Grüße
-
Da der Vergleich von Zeichenketten öfter vorkommt, gibt es dafür schon eine Funktion in der C-Standard-Library.
In diesem Fall ist das strcmpDu solltest dir unbedingt nochmal überlegen, ob die Namen in jeweils nur einem Zeichen gespeichert werden können.
Was willst du eigentlich mit den Variablen vn und nn machen.Überhaupt musst du dir nochmal richtig das Kapitel über Strings in C durchlesen.
Auch die Paramterübergabe beim Einlesen von Strings bei scanf musst du dir ansehen.Nutze beim nächsten mal die Code-Tags zum posten: COdde markieren und auf den C-Button unter dem
klicken.
-
Hi,
ich hatte mich auch extra angemeldet. Werde morgen den Code, überarbeitet mit Kommentaren reinstellen. Es ist schon spät und offensichtlich geht mit nichts mehr in den Kopf...
Selbstverständlich ist der Ansatz den ich geliefert habe Mist, habs nichtmal mehr gemerkt mit dem Feld.
Nur noch einmal zum Verständnis:
Ich muss das Feld mit einer Schleife hochzählen, und in jedem ein Vergleich anstellen. Sollte ich ein Treffer haben, gebe ich in diesem Feld dann die zugehörige Matrikelnummer aus. ?!
Wie verhält sich das wenn ich 2 mal den selben namen Verwende?Danke
Grüße
-
Das verhalten hängt von deinem Programm ab.
Wenn du nach dem ersten Fund aufhörst, wird nur der erste Name ausgegeben.
Wenn due weitersuchst, werden alle passenden NAmen ausgegeben.Was sinnvoller ist, darfst du dir überlegen
-
Hi,
Programm läuft nun soweit. Nun möchte ich die die einzelnen struct Arrays in eine Datei speichern, um sie später wieder auszulesen und in das leere struct Array zurückzugeben.
Hier die struct:
struct student { int matrikelnr; char vorname[9]; char nachname[13]; }; struct student prak_gr[100];
In eine txt datei zu speichern ist kein Problem, nur werden die einzelnen struct Arrays einfach aneinander gehängt.
1. Wie bekomme ich diese getrennt,das ich
2. sie so wieder zurück in das Struct Array geben kann.Also das sieht folgendermaßen aus wenn ich z.B. 3 Datensätze eingeben habe:
VornameNachnameMatrikelnrVornameNachnameMatrikelnrVornameNachnameMatrikelnr.
EDIT:
Die Ausgabe wie sie oben steht, ist mit fprintf gemacht. Habe es mit fwrite versucht alsofwrite(prak_gr,sizeof(prak_gr)1,fp)
bekomme damit allerdings jede Menge Leerzeichen und für den int wert sowas: yyyyyy in der art.
Grüße
-
fwrite schreibt ein Speicherabbild in die Datei.
Bei fprintf solltest du mal den Formatstring anpassen.
Vor allem mal Trennzeichen wie Komma oder Semikolon und Zeilenvorschub nehmen.Lesen geht mit fscanf.