einfache struktur übergabe an eine funktion in c
-
Hi liebe User bin noch ein c anfänger und hab ein kleines problem mit einer aufgabe aus der schule. ich sollte eine funktion schreiben in dem eine struktur übergeben wird.
hier der code
#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning (disable:4996) void person(struct kontakt); struct kontakt { char name [20]; char vorname [20]; char mail [30]; char geschlecht; int vorwahl; int rufnummer; int alter; }; void main(void) { int i; struct kontakt p[5]; i=0; printf("Bitte geben sie ihren Namen ein:"); scanf("%s", p[i].name); fflush(stdin); printf("Bitte geben sie ihren Vornamen ein:"); scanf("%s",p[i].vorname); fflush(stdin); printf("Bitte geben sie ihre E-Mail Adresse:"); scanf("%s",p[i].mail); fflush(stdin); printf("Bitte geben sie ihr Alter ein:"); scanf("%d",&p[i].alter); fflush(stdin); printf("Bitte geben sie ihr Geschlecht ein m oder w:"); scanf("%c",& p[i].geschlecht); fflush(stdin); printf("Bitte geben sie die Vorwahl ihrer Mobilnummer ein:"); scanf("%d",& p[i].vorwahl); fflush(stdin); printf("Bitte geben sie die Rufnummer ihrer Mobilnummer ein"); scanf("%d",& p[i].rufnummer); fflush(stdin); /*printf("%s\n",p->name); printf("%s\n",p->vorname); printf("%s\n",p->mail); printf("%d\n",p->alter); printf("%c\n",p->geschlecht); printf("+%d %d\n",p->vorwahl,p->rufnummer);*/ person(*p); } void person(struct kontakt p[]) { printf("%s\n",p->name); printf("%s\n",p->vorname); printf("%s\n",p->mail); printf("%d\n",p->alter); printf("%c\n",p->geschlecht); printf("+%d %d\n",p->vorwahl,p->rufnummer); }
würde mich über nützliche tips sehr freuen. danke im voraus.
ups glaub habs ins falsche forum gepostet ..sorry
-
Guck bei Google.
-
rse7en schrieb:
person(*p); } void person(struct kontakt p[])
person(&p); // sowie void person(kontakt *p)
hand, mogel
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum C# und .NET in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
mogel schrieb:
rse7en schrieb:
person(*p); } void person(struct kontakt p[])
person(&p); // sowie void person(kontakt *p)
Nö nö, so geht das aber nicht. Der Adressoperator beim Funktionsaufruf gehört da nicht hin. Außerdem muss der Prototyp angepasst werden:
void person(struct kontakt*);
Ein kleiner Dorn im Auge ist auch
fflush (stdin);
- das führt zu undefiniertem Verhalten (siehe FAQ).Gez. monstermunchkin
-
Du willst mit der Funktion person ein struct (also ein Element deines Arrays) ausgeben. Richtig? Dann lass die eckigen Klammern weg und übergib einfach ein struct. Das ist vermutlich erstmal die einfachste und naheliegendste Lösung:
//Funktion... void person(struct kontakt p) { printf("%s\n",p.name); printf("%s\n",p.vorname); printf("%s\n",p.mail); printf("%d\n",p.alter); printf("%c\n",p.geschlecht); printf("+%d %d\n",p.vorwahl,p.rufnummer); } //...und Aufruf person(p[i]);
EDIT: Übrigens solltest du die Deklaration deines struct vor der ersten Verwendung (im Prototypen deiner Funktion) notieren.
-
Vielen Dank für eure Antworten hab das problem mit eurer hilfe und bissel selbsthilfe lösen können werde es morgen mittag posten.
Besten Dank
-
_matze schrieb:
Du willst mit der Funktion person ein struct (also ein Element deines Arrays) ausgeben. Richtig? Dann lass die eckigen Klammern weg und übergib einfach ein struct. Das ist vermutlich erstmal die einfachste und naheliegendste Lösung:
//Funktion... void person(struct kontakt p) { printf("%s\n",p.name); printf("%s\n",p.vorname); printf("%s\n",p.mail); printf("%d\n",p.alter); printf("%c\n",p.geschlecht); printf("+%d %d\n",p.vorwahl,p.rufnummer); }
^^besser als pointer: void person(struct kontakt *****p)
sonst wird alles kopiert, was ja hierfür unnötig ist.
-
;fricky schrieb:
^^besser als pointer: void person(struct kontakt *****p)
sonst wird alles kopiert, was ja hierfür unnötig ist.
Klar, aber da er wohl noch so seine Probleme mit Pointern hat, wollte ich es einfach halten (hatte ich ja auch gesagt).
-
so wie versprochen meine Lösung @ moment
#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning (disable:4996) void person_eingabe(struct kontakt *p[], int pmax); void person_ausgabe(struct kontakt *p[],int pmax); struct kontakt { char name[30]; char vorname[30]; char email[20]; char geschlecht; int alter; int vorwahl; int rufnummer; }; void main(void) { int pmax; struct kontakt *p[30]; printf("Wieviel Personen moechten sie in die Datenbank eingeben?:"); scanf("%d", &pmax); fflush(stdin); person_eingabe(p,pmax); person_ausgabe(p,pmax); } void person_eingabe(struct kontakt *p[], int pmax) { int i=0; while(i<pmax) { p[i] = malloc (sizeof(struct kontakt)); printf("Name:"); scanf("%s", p[i]->name); fflush(stdin); printf("Vorname:"); scanf("%s", p[i]->vorname); fflush(stdin); printf("e-mail:"); scanf("%s",p[i]->email); fflush(stdin); printf("Geschlecht:"); scanf("%c",&p[i]->geschlecht); fflush(stdin); printf("Alter:"); scanf("%d",&p[i]->alter); fflush(stdin); printf("Vorwahl"); scanf("%d",&p[i]->vorwahl); fflush(stdin); printf("Rufnummer"); scanf("%d",&p[i]->rufnummer); fflush(stdin); i++; } } void person_ausgabe(struct kontakt *p[],int pmax) { int j; j=0; while(j<pmax) { printf("%s\n",p[j]->name); printf("%s\n",p[j]->vorname); printf("%s\n",p[j]->email); printf("%c\n",p[j]->geschlecht); printf("%d\n",p[j]->alter); printf("%d\n",p[j]->vorwahl); printf("%d\n",p[j]->rufnummer); ++j; } }
-
Den allozierten Speicher solltest du aber schon wieder freigeben. Ebenso solltest du
fflush (stdin)
vermeiden -> undefiniertes Verhalten
-
monstermunchkin schrieb:
Ebenso solltest du
fflush (stdin)
vermeiden -> undefiniertes VerhaltenAußer beim MS-Compiler, da ist's erlaubt (was nicht heißen soll, dass man sich nicht doch besser eine andere Methode angewöhnen sollte).
-
_matze schrieb:
Außer beim MS-Compiler, da ist's erlaubt
also was nun, 'undefined' oder 'implementation defined'? hab mir sagen lassen, dass das ein unterschied ist.
-
;fricky schrieb:
_matze schrieb:
Außer beim MS-Compiler, da ist's erlaubt
also was nun, 'undefined' oder 'implementation defined'? hab mir sagen lassen, dass das ein unterschied ist.
Tja, wahrscheinlich undefined laut Standard und implementation defined laut MS.
MS schrieb:
fflush on input stream is an extension to the C standard