Brauche Hilfe bei einer Datenstruktur-Aufgabe



  • Mahlzeit erst einmal 🙂

    also ich soll eine Datenstruktur über "typedef" erstellen

    typedef struct{...}
    

    soweit nicht das Problem...jedoch soll ich erst einmal ein Datenfeld für 5 Datensätze festlegen.

    Sind diese schon durch hinzufügen von "[5]" definiert oder wie bewerkstellige ich dies?

    Bin ein ziemlicher Neuling in diesem Gebiet und hoffe dadurch auf Geduld und verständliche Hilfe.

    Danke schon mal ^^



  • typedef struct
    {
       ...
    } MY_SUPER_TYPE;
    
    MY_SUPER_TYPE myArray[5];
    

    aber auch so

    typedef struct
    {
       ...
    } MY_SUPER_TYPE;
    
    MY_SUPER_TYPE myArray =
    {
        { ... },
        { ... },
        { ... },
        { ... },
        { ... }
    };
    


  • mgaeckler schrieb:

    MY_SUPER_TYPE myArray =
    {
        { ... },
        { ... },
        { ... },
        { ... },
        { ... }
    };
    

    Das ist so falsch. Richtig wäre

    MY_SUPER_TYPE myArray[] =
    {
        { ... },
        { ... },
        { ... },
        { ... },
        { ... }
    };
    


  • ich werde es gleich mal probieren und dann berichten wie es läuft



  • Wutz schrieb:

    mgaeckler schrieb:

    MY_SUPER_TYPE myArray =
    {
        { ... },
        { ... },
        { ... },
        { ... },
        { ... }
    };
    

    Das ist so falsch. Richtig wäre

    MY_SUPER_TYPE myArray[] =
    {
        { ... },
        { ... },
        { ... },
        { ... },
        { ... }
    };
    

    Äh, sorry, da hab ich was vergessen 🙄



  • 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?

    ich überlege ob ich durch:

    stud[1]='...'
    

    den ersten wert definieren kann und den rest in einer "For" schleife per eingabe hinzufügen kann



  • 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 mit

    scanf()
    

    weitere "Werte" einlesen?



  • kakashi_black schrieb:

    ist das so nun richtig?
    kann ich einfach mit

    scanf()
    

    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.


Anmelden zum Antworten