Brauche Hilfe bei einer Datenstruktur-Aufgabe
-
kakashi_black schrieb:
also ich bin nun soweit:
#include <stdio.h> typedef struct { char vorname[15]; char nachname[25]; char geburtsdatum[11]; int matrikelnummer; }AUSWEIS; AUSWEIS stud[5] {
der erste Wert der Struktur soll vordefiniert sein...wie kann ich das mit dem ersten Feld verknüpfen und und die anderen per Eingabe hinzufügen?
AUSWEIS stud[5] = { { "Black", "Kakashi", "11.06.1999", 12345 } };
-
#include <stdio.h> typedef struct { char vorname[15]; char nachname[25]; char geburtsdatum[11]; int matrikelnummer; }AUSWEIS; AUSWEIS stud[5]= { {"kakashi","black","02.01.1987",505080} };
ist das so nun richtig?
kann ich einfach mitscanf()
weitere "Werte" einlesen?
-
kakashi_black schrieb:
ist das so nun richtig?
kann ich einfach mitscanf()
weitere "Werte" einlesen?
Klar, warum nicht?
-
muss ich die eingegebenen Daten dann mit
strcpy();
mit dem jeweiligen Feld verknüpfen?
habe ja nun nur ein Feld von den 5 belegt
-
kakashi_black schrieb:
muss ich die eingegebenen Daten dann mit
strcpy();
mit dem jeweiligen Feld verknüpfen?
habe ja nun nur ein Feld von den 5 belegt
Ja, das geht. Ist doch egal, wieviele Datensätze Du belegt hast, Du hast dem Compiler gasagt, daß 5 Datensätze im Array enthalten sein sollen und damit basta.
-
mgaeckler schrieb:
kakashi_black schrieb:
muss ich die eingegebenen Daten dann mit
strcpy();
mit dem jeweiligen Feld verknüpfen?
habe ja nun nur ein Feld von den 5 belegt
Ja, das geht. Ist doch egal, wieviele Datensätze Du belegt hast, Du hast dem Compiler gasagt, daß 5 Datensätze im Array enthalten sein sollen und damit basta.
Guten Abend,
Wäre es vielleicht möglich, das komplette Programm zu sehen?
-
also ich bekomme es i-wie nicht hin.
habe es nun so versucht:
#include <stdio.h> #include <string.h> typedef struct { char vorname[15]; char nachname[25]; char geburtsdatum[11]; int matrikelnummer; }AUSWEIS; int main (void){ AUSWEIS stud[5]= { {"oawsjhd","asdf","20.12.1907",500000} }; scanf("%s %s %s %i", &stud[1].vorname, &stud[1].nachname, &stud[1].geburtsdatum, &stud[1].matrikelnummer); return 0; }
Ich bekomme dabei die fehlermeldung:
quelltext.c: In function 'main':
quelltext.c:22:5: warning: format '%s' expects type 'char ', but argument 2 has type 'char ()[15]'
quelltext.c:22:5: warning: format '%s' expects type 'char ', but argument 3 has type 'char ()[25]'
quelltext.c:22:5: warning: format '%s' expects type 'char ', but argument 4 has type 'char ()[11]'was mache ich denn nur falsch?
-
Steht doch in der Fehlermeldung => noch mal die Unterlagen mit scanf ansehen und was bei Strings besonders ist.
-
also ich dachte das es so so vllt geht
#include <stdio.h> #include <string.h> typedef struct { char vorname[15]; char nachname[25]; char geburtsdatum[11]; int matrikelnummer; }AUSWEIS; int main (void){ int i; AUSWEIS stud[5]= { {"oawsjhd","asdf","20.12.1907",500000} }; for(i=1, i<5, i+=i){ scanf("%s", &stud[i].vorname); scanf("%s", &stud[i].nachname); scanf("%s", &stud[i].geburtsdatum); scanf("%i", &stud[i].matrikelnummer); } return 0; }
aber kommt wieder das selbe.
@f.-th. : ich habe noch mal nach geschaut aber keine ahnung worauf du hinaus willst. o_O
-
In Zeile 22 bei deinem ersten Quelltext sind 3 Zeichen zu viel. Mach die weg und es ist gut. Es sind 3 mal die selben. Siehe Strings und scanf.
-
Hier noch mal eine Referenz für scanf
Schau dir in dem Beispiel dort mal den Unterschied zwischen Zeile 10 (Strings) und 12 (Integer) an. (ich meine nicht %s und %d)
-
du meinst doch das ich den Index weglassen soll oder?
aber wie bekomme ich denn dann die jeweiligen daten der structur zugeordnet?
-
Nein, das meine ich nicht.
Bei Arrays brauchst du den Adressoperator nicht, da der Arrayname (ohne Index) schon mit der Adresse Verküpft ist.
Hier geht es um das Array vorname[15].
stud[i].vorname
ist schon die Adresse.Deine matrikelnummer ist kein Array!
-
also damit ich es richtig verstehe... dadurch das stud[1].vorname anspreche, spreche ich direkt die gesamte struktur an ohne die einzelne zuordnung noch machen zu müssen?
-
Du sprichst mit
stud[1].vorname
nur das Element vorname an.
Du hast damit den Zeiger auf das erste Element von vorname[15].Lies in deinem Tutorial/Buch nochmal das Kapitel über Zeiger/Arrays/Strings durch.
Unbedingt wie Arrays an Funktionen übergeben werden.Und wie Strings mit scanf eingelesen werden. Das ist z.Zt. dein Problem.
-
Das Problem liegt in der Typüberprüfung von C. Eigentlich übergibst Du genau das richtige, aber der Typ stimmt nicht.
stud[1].vorname ist ein char[15], stud[1].vorname[0] ist das erste Zeichen und vom Typ char und &stud[1].vorname[0] ist die Adresse des ersten Zeichens. Das ist dann auch vom Typ char *
Also:
scanf("%s", &stud[1].vorname[0])
Oder du sagst dem Compiler "das passt schon" indem Du den Typ castes (
)
Der Wert von stud[1].vorname und &stud[1].vorname[0] ist nämlich identisch:scanf("%s", (char *)stud[1].vorname)
Beides funktioniert, wobei es gefährlich ist zu casten, wenn man nicht genau weiss was man tut. Der Compiler überprüft dann den Typ nicht mehr, sondern verwendet den Wert einfach, egal, was Du übergibst.
Also für Dich passt die erste Variante wohl besser