Strukturen

seriously

Mitglied
Hallo . . . :=]

Aufgabe:

Das Programm soll so arbeiten, dass man beliebig viele Personen
einlesen bzw. ausgeben kann.(das geschieht durch Unterprogramme).
Dann muss man natuerlich Speicher dynamisch (mit malloc)
fuer ein Feld von Strukturen reservieren (und ihn) am Ende des
Programms wieder freigeben.
Die Unterprogramme funktionieren.

Das Problem:

Beispielsweise ist die Anzahl der Personen, die eingegeben werden 3.
Die erste Eingabe geht , dann die gehen die anderen zwei nicht.

Code:
Code:
void Eingabe (struct Person *p1);
void Ausgabe (struct Person *p1);

int main (void){
   int n;
   int i;
   struct Person *p1;

   printf("Geben Sie eine Anzahl ein :"); scanf("%d", &n); getchar();

   p1= (Person *) malloc (n * sizeof (Person));

   i=1;
   while ( i <= n){
         Eingabe(&p1[0]);
         i++;
   }
   i=1;
   while (i <= n){
         Ausgabe(&p1[0]);
         i++;
   }
   getchar ();
   return 0;

} // main

// -------------------------------------------------------------------------
void Eingabe ( struct Person *p1)
{
   printf("Nachname: ");  fgets(p1->Nachname,51, stdin);
   printf("Vorname:");
   fgets(p1->Vorname,101, stdin);
   printf("PLZ=");
   scanf("%d", &p1->PLZ); getchar();
   printf("Ort: ");
   fgets(p1->Ort,51,stdin);
   printf("Gburtsjahr=");
   scanf("%d\n",&p1->Geburtsjahr);
}

void Ausgabe (struct Person *p1)
{
   printf("Sie gaben ein:\n");
   printf("Nachname: %s\n", p1->Nachname);
   printf("Vorname: %s\n", p1->Vorname);
   printf("PLZ:%d\n", p1->PLZ);
   printf("Ort:%s\n", p1->Ort);
   printf("Gburtsjahr: %d\n",p1->Geburtsjahr);

}
 
Hi

was bedeutet, "die weiteren funktionieren nicht"?
Absturz? Andere Probleme?

In deinem Code fehlt übrigens die Struktur selber, die könnte auch interessant werden.

Und im main gibst du n-mal die nullte Struktur aus.
Du musst schon i statt 0 im Index verwenden.
Besser gesagt "i-1", da du bei n=3 nicht 0-1-2, sondern 1-2-3 zählst.

Gruß
 
Sorry
Die struktur selber habe ich eingebunden, die geht schon.
Wie meinst du i statt 0 ?
Ich habe den Index von i ee am Anfang auf 1 gesetzt
 
Warum?

Die struktur selber habe ich eingebunden, die geht schon.
Glaub ich bei Forumsfragen prinzipiell nicht.

Wie meinst du i statt 0 ?
Ich habe den Index von i ee am Anfang auf 1 gesetzt
Was ist ee?

Und ich meinte das:
C++:
i=1;
while ( i <= n){
    Eingabe(&p1[0]);
    i++;
}
i=1;
while (i <= n){
    Ausgabe(&p1[0]);
    i++;
}
sollte eher so aussehen, sonst gehst du immer auf die erste (bzw. nullte) Struktur von n:
C++:
i=1;
while ( i <= n){
    Eingabe(&p1[i-1]);
    i++;
}
i=1;
while (i <= n){
    Ausgabe(&p1[i-1]);
    i++;
}
Und statt umständlich mit while und i-1 herumzutun, am Besten gleich so:
C++:
for(i=0;i<n;i++) Eingabe(p1+i);
for(i=0;i<n;i++) Ausgabe(p1+i);

Desweiteren fehlt am Ende von main, am Besten vor return und getchar(), ein
C++:
free(p1);

Gruß
 
Zuletzt bearbeitet:
Zurück