Struct Übergabe



  • Guten Tag,

    ich bin ein absoluter Noob was c/c++ angeht. Ich hatte zwar 2 Jahre C in der Schule, aber es ging dort sehr langsam vorran und wie sind auch nicht sonderlich weit gekommen.

    Bitte verweißt nicht auf andere bereits existierende Beträge. Ich habe in diesem Forum schon einige Stunden verbracht, aber komme irgendwie nicht weiter...

    Ich soll eigentlich nur ein kleines Programm schreiben welches in einer Funktion ein leeres Struct als Parameter übergeben bekommt, dieses dann über die Komandozeile mit Daten gefüllt wird, das gefüllte Struct wieder zurück gibt und in einer weiteren Funktion "hübsch" ausgiebt.

    Ich wäre super glückllich über Eure Hilfe!
    Auch nett wäre eine Erklärung warum Ihr was, wie, machen würdet.
    Ich habe bis jetzt folgendes geschrieben:

    # include <stdio.h>
    # include <stdlib.h>
    
    struct kontaktdaten
    {
    	char *name;
    	char *vorname;
    	char *strasse;
    	int hausnummer;
    	int plz;
    	char *ort;
    	int telefon;
    	char *handy;
    	char *email;
    };
    
    void eingabe(struct kontaktdaten *daten1);
    void ausgabe(struct kontaktdaten *daten1);
    
    void main(){
    
    eingabe (kontaktdaten *daten1);
    ausgabe (kontaktdaten *daten1);
    
    }
    void eingabe (struct kontaktdaten daten1){
    
    struct kontaktdaten daten1;
    
    daten1.name = "Mustermann";
    daten1.vorname= "Peter";
    daten1.strasse = "Testweg";
    daten1.hausnummer = 10;
    daten1.plz = 12345;
    daten1.ort = "Hamburg";
    daten1.telefon = 1234567;
    daten1.handy = "12345678910";
    daten1.email = "peter@mustermann.de";
    
    //return kontaktdaten *daten1;
    }
    
    void ausgabe (struct kontaktdaten daten1){
    
    printf ("Name: %s\nVorname: %s\nStrasse: %s\nHausnummer: %d\nPLZ: %d\nOrt: %s\nTel.: %d\nHandy: %s\nE-Mail: %s",
    		 daten1.name,daten1.vorname,daten1.strasse,daten1.hausnummer,
    		 daten1.plz,daten1.ort,daten1.telefon,daten1.handy,daten1.email);
    
    }
    

    Ich sage schon mal vielen vielen Dank!!!

    Gruß

    Moritz

    P.S.: Ich habe genau diesen Beitrag schon in dem Forum "MFC mit dem Visual C++" geschrieben, da ich Visual C benutze und dachte da wäre ich gut aufgehoben, aber ein Mitglied meinte hier bin ich besser aufgehoben,eigentlich auch logisch. Sorry!



  • Mit einiger Hilfe bin ich etwas weiter gekommen!
    Mein Code sieht jetzt folgendermaßen aus:

    # include <stdio.h>
    # include <stdlib.h>
    
    struct kontaktdaten
    {
    	char *name;
    	char *vorname;
    	char *strasse;
    	int hausnummer;
    	int plz;
    	char *ort;
    	int telefon;
    	char *handy;
    	char *email;
    };
    
    void eingabe(struct kontaktdaten *daten1);
    void ausgabe(struct kontaktdaten *daten1);
    
    void main(){
    
    eingabe (kontaktdaten);
    ausgabe (kontaktdaten);
    
    }
    void eingabe (struct kontaktdaten daten1){
    
    //struct kontaktdaten daten1;
    
    daten1.name = "Mustermann";
    daten1.vorname= "Peter";
    daten1.strasse = "Testweg";
    daten1.hausnummer = 10;
    daten1.plz = 12345;
    daten1.ort = "Hamburg";
    daten1.telefon = 1234567;
    daten1.handy = "12345678910";
    daten1.email = "peter@mustermann.de";
    
    //return kontaktdaten *daten1;
    }
    
    void ausgabe (struct kontaktdaten daten1){
    
    printf ("Name: %s\nVorname: %s\nStrasse: %s\nHausnummer: %d\nPLZ: %d\nOrt: %s\nTel.: %d\nHandy: %s\nE-Mail: %s",
    		 daten1.name,daten1.vorname,daten1.strasse,daten1.hausnummer,
    		 daten1.plz,daten1.ort,daten1.telefon,daten1.handy,daten1.email);
    
    }
    

    Ich habe noch folgende zwei Fehlermeldungen:

    D:\VisualStudio\MSDev98\MyProjects\Struct\Struct1_1.cpp(23) : error C2275: "kontaktdaten" : Ungültige Verwendung dieses Typs als Ausdruck
    D:\VisualStudio\MSDev98\MyProjects\Struct\Struct1_1.cpp(5) : Siehe Deklaration von 'kontaktdaten'
    D:\VisualStudio\MSDev98\MyProjects\Struct\Struct1_1.cpp(24) : error C2275: "kontaktdaten" : Ungültige Verwendung dieses Typs als Ausdruck
    D:\VisualStudio\MSDev98\MyProjects\Struct\Struct1_1.cpp(5) : Siehe Deklaration von 'kontaktdaten'
    Fehler beim Ausführen von cl.exe.

    Struct1_1.obj - 2 Fehler, 0 Warnung(en)



  • Hallo,

    schau dir mal deine Funktionskoepfe bei der Deklaration und der Definition an.
    Das 'struct' kannst du bei der Variablendeklaration (bzw. Parameterdeklaration)
    weglassen.

    mfg
    v R



  • So sollte es gehen: (Ich habe die Fehler kommentiert)

    # include <stdio.h>
    # include <stdlib.h>
    
    struct kontaktdaten
    {
        char *name;
        char *vorname;
        char *strasse;
        int hausnummer;
        int plz;
        char *ort;
        int telefon;
        char *handy;
        char *email;
    };
    
    void eingabe(struct kontaktdaten *daten1);
    void ausgabe(struct kontaktdaten *daten1);
    
    void main()
    {
    /*
      eingabe (kontaktdaten); <- das kann so nicht gehen du übergibst keine Variable sondern einen Typ!
      ausgabe (kontaktdaten);
    */
    
      struct kontaktdaten daten;
      eingabe (&daten); // Pointer bilden und an die Funktion übergeben
      ausgabe (&daten);
    
    }
    /*void eingabe (struct kontaktdaten daten1) <- Fehlt das '*'  */
    void eingabe (struct kontaktdaten *daten1)
    {
      if(!daten1) return; // Speicherzugriffsfehler vermeiden
    
    //struct kontaktdaten daten1;
    // Zugriff nur über ->
    daten1->name = "Mustermann";
    daten1->vorname= "Peter";
    daten1->strasse = "Testweg";
    daten1->hausnummer = 10;
    daten1->plz = 12345;
    daten1->ort = "Hamburg";
    daten1->telefon = 1234567;
    daten1->handy = "12345678910";
    daten1->email = "peter@mustermann.de";
    
    }
    // Der selbe fehler 1. fehlendes * 2. zugriff über ->
    void ausgabe (struct kontaktdaten *daten1)
    {
      if(!daten1) return; // Speicherzugriffsfehler vermeiden
    
    printf ("Name: %s\nVorname: %s\nStrasse: %s\nHausnummer: %d\nPLZ: %d\nOrt: %s\nTel.: %d\nHandy: %s\nE-Mail: %s",
             daten1->name,daten1->vorname,daten1->strasse,daten1->hausnummer,
             daten1->plz,daten1->ort,daten1->telefon,daten1->handy,daten1->email);
    
    }
    


  • SUPER!!! 🙂 🙂 🙂

    Vielen Vielen Dank!

    Auch danke für die guten Komentare!!!

    Wünsche noch nen schönen Tag!

    MfG

    Moritz


Anmelden zum Antworten