Array von einer Struktur



  • Hallo,
    ich arbeite mich gerade durch mein C buch und habe mal ein listing eingetippt und ausprobiert.
    Doch stellte ich einen Fehler des Listings fest.

    das original :

    1:  /* Beispiel für Arrays von Strukturen. */
    2:
    3:  #include <stdio.h>
    4:
    5:  /* Definiert eine Struktur zur Aufnahme von Einträgen. */
    6:
    7:  struct eintrag {
    8:      char vname[20];
    9:      char nname[20];
    10:     char telefon[10];
    11: };
    12:
    13: /* Deklariert ein Array von Strukturen. */
    14:
    15: struct eintrag liste[4];
    16:
    17: int i;
    18:
    19: int main(void)
    20: {
    21:
    22:     /* Durchläuft eine Schleife für die Eingabe der Daten von 4 
    23:        Personen. */
    24:     for (i = 0; i < 4; i++)
    25:     {
    26:         printf("\nBitte Vornamen eingeben: ");
    27:         scanf("%s", liste[i].vname);
    28:         printf("Bitte Nachnamen eingeben: ");
    29:         scanf("%s", liste[i].nname); 
    30:         printf("Bitte Telefonnummer im Format 123-4567 eingeben: ");
    31:         scanf("%s", liste[i].telefon);
    32:     }
    33:
    34:     /* Zwei leere Zeilen ausgeben. */
    35:
    36:     printf("\n\n");
    37:
    38:     /* Durchläuft eine Schleife zur Anzeige der Daten. */
    39:
    40:     for (i = 0; i < 4; i++)
    41:     {
    42:         printf("Name: %s %s", liste[i].vname, liste[i].nname);
    43:         printf("\t\tTelefon: %s\n", liste[i].telefon);
    44:     }
    45:
    46:     return 0;
    47: }
    

    Daten Eingabe :

    Bitte Vornamen eingeben: BradleyBitte
    Nachnamen eingeben: JonesBitte
    Telefonnummer im Format 123-4567 eingeben: 555-1212Bitte

    Vornamen eingeben: Peter
    Bitte Nachnamen eingeben: Aitken
    Bitte Telefonnummer im Format 123-4567 eingeben: 555-3434

    Bitte Vornamen eingeben: Melissa
    Bitte Nachnamen eingeben: Jones
    Bitte Telefonnummer im Format 123-4567 eingeben: 555-1212

    Bitte Vornamen eingeben: Deanna
    Bitte Nachnamen eingeben: Townsend
    Bitte Telefonnummer im Format 123-4567 eingeben: 555-1234

    Daten Ausgabe :

    Name: Bradley Jones Telefon: 555-1212
    Name: Peter Aitken Telefon: 555-3434
    Name: Melissa Jones Telefon: 555-1212
    Name: Deanna Townsend Telefon: 555-1234

    Nun ich weiß nicht ob Ihr das selbe Problem haben werdet, doch ich compilierte es ohne problem und startete es.
    Bei der Eingabe bemerkte ich, dass ich keinen Nachnamen und keine Telefonnummer eingeben konnte wie eigentlich vorgesehen.

    Also änderte ich Zeile 24 - 32 wie folgt :

    /* arrays von strukturen */
    
    #include <stdio.h>
    
    /* Definieren der Struktur zur aufnahme von Einträgen */
    
    struct eintrag {
    
     char vname[20];
     char nname[20];
     char telefon[10];
    
     };
    
    /* Deklarierung des Arrays welches die Struktur beinhaltet */
    
    struct eintrag liste[4];
    
    int i;
    
    int main (void)
    {
    
     /* Durchläuft eine Schleife für die Eingabe von 4 Datensätzen */
    
    24: for(i=0; i<4 ; i++)
    25: {
    26:  printf("\n Bitte geben Sie einen Vornamen ein: ");
    27:  scanf("%s", liste[i].vname);
    28: }
    29:
    30:/* Diese Schleife zählt die Struktur-Arrays wieder herunter da beim letzten
    31: Durchlauf der ersten Schleife wir ja die Struktur-Arrays hochgezählt haben */
    32:
    33:/* So ist Die Lösung und das Eingeben der Vor- und Nachnamen gewährleistet */
    34:
    35:
    36: for(i=4; i >= 4 ; i--)
    37: {
    38:  printf("\n Bitte geben Sie einen Nachnamen ein: ");
    39:  scanf("%s", liste[i].nname); 
    40: }
    41: 
    42: /* Diese Schleife zählt die Struktur-Arrays wieder hoch doch ob diese
    43: Durchlaufen wird ist nicht gewiss, da beim Test diese Immer wieder
    44: ignoriert wurde und nur Vor - und Nachnamen ausgegeben wurden */
    45:
    46: for( i=0 ; i < 4 ; i++)
    47: {
    48:  printf("\n Bitte geben Sie eine Telefonnummer ein: ");
    49:  scanf("%s", liste[i].telefon);
    50:
    51: }
    
       /* zwei leere Zeilen */
    
        printf("\n\n");
    
       /* Durchlauf der Schleife zur Anzeige der Datensätze */
    
       for(i=0; i < 4;i++)
    
       {
    
        printf(" Name : %s %s", liste[i].vname, liste[i].nname);
        printf("\t\t Telefon: %s\n",liste[i].telefon);
    
       }
    
       return 0;
    }
    

    Ich habe das Problem in einem Kommentar schon beschrieben.
    Die letzte for-Schleife wird ignoriert wieso, weshalb und warum weiß ich nicht.
    Ich habe den geänderten Code mit Zeilennummern versehen damit er leichter erkennbar ist.

    **/* Die Zeilennummern sind nicht richtig nur zur besseren Erkennung eingetragen worden */
    **
    Das original Listing entspringt dem buch teach yourself C in 21 days aus der übersetzten Version von Markt&Technik S.300 - 302 .

    Mein Compiler ist der TC von Borland (Dos-Anwendung).
    Ist aber nicht verändert worden und eigentlich sehr zuverlässig.

    Irgendwelche Ideen ? Warum dieser Fehler besteht ?
    Ich hab schon daran gedacht mit einer for oder while schleife die Daten wieder aus zu geben doch würde es das problem lösen ?

    Danke schön mal an die die sich damit auseinandersetzen.



  • mach mal nach jedem scanf() ein

    while(getchar()!='\n');
    

    oder verwende fgets()...



  • thx für deine hilfe. funktioniert jetzt einwandfrei.


Anmelden zum Antworten