Zeiger auf Struct in einer Funktion



  • Hey Leute

    Wir haben heute im Programmierkurs eine Aufgabe bekommen, die mich zur Verzweiflung bringt. Die Aufgabe ist es, ein Struct zu schreiben, bei denen man Namen, Vornamen und Alter eingeben kann und dann mit diesen Struktangaben die eingabe und Ausgabe der Daten in zwei verschiedenen Funktionen aufzuzeichnen. Soweit habe ich es geschafft, nun muss ich aber ein Zeiger (Pointer) in die Funktion einfügen, die auf den Struct zeigt und das kriege ich einfach nicht hin... 😞

    hier ist mein Code bis jetzt

    //Eingabe der In/out Bibliothek
    
    #include <iostream>
    
    //Angabe welchen Namensraum man verwenden will (hier standard)
    using namespace std;
    
    struct Person
    {
        char vorName[20];
        char nachName[20];
        int alter;
    };
     Person gabriel;
    
    void personeingabe();
    void personausgabe();
    //Hauptfunktion
    int main()
    {
    Person *gabrielzeiger = &gabriel;
    personeingabe(Person *gabrielzeiger);
    personausgabe(Person *gabrielzeiger);
    
    cin.get();
    system ("pause");
    return 0;
    }
    void personeingabe(struct Person *gabrielzeiger = &gabriel)
    {
    
        cout << "Bitte geben sie ein alter ein" << endl;
        cin >> gabrielzeiger ->alter;
        cout << "Bitte geben sie einen Vornamen ein" << endl;
        cin >> gabrielzeiger ->vorName;
        cout << "Bitte geben sie einen Nachnamen ein" << endl;
        cin >> gabrielzeiger ->nachName;
    }
    
    void personausgabe(struct Person *gabrielzeiger = &gabriel)
    {
    
         cout << "Die Person ist " << gabrielzeiger ->alter << "   Jahre alt " << endl;
         cout << "Sein Vorname ist " << gabrielzeiger ->vorName << endl;
         cout << "Und sein Nachname ist " << gabrielzeiger ->nachName << endl;
    }
    

    Ich hoffe wirklich, dass ihr mir helfen könnt 🙂 vielleicht noch mit erklärung, was ich genau falsch gemacht habe^^

    Gruss PicoG



  • //Eingabe der In/out Bibliothek
    
    #include <iostream>
    
    //Angabe welchen Namensraum man verwenden will (hier standard)
    using namespace std;
    
    struct Person
    {
        char vorName[20];
        char nachName[20];
        int alter;
    };
     Person gabriel;
    
    void personeingabe();
    void personausgabe();
    //Hauptfunktion
    int main()
    {
    Person *gabrielzeiger = &gabriel;
    personeingabe(gabrielzeiger); //Das ist ja schon ein Zeiger!
    personausgabe(gabrielzeiger);
    
    cin.get();
    system ("pause");
    return 0;
    }
    void personeingabe(Person *personzeiger) //kann ja bei jedem Aufruf auf eine andere Person zeigen
    {
    
        cout << "Bitte geben sie ein alter ein" << endl;
        cin >> personzeiger->alter;
        cout << "Bitte geben sie einen Vornamen ein" << endl;
        cin >> personzeiger->vorName;
        cout << "Bitte geben sie einen Nachnamen ein" << endl;
        cin >> personzeiger->nachName;
    }
    
    void personausgabe(Person *personzeiger) //siehe oben
    {
    
         cout << "Die Person ist " << personzeiger->alter << "   Jahre alt " << endl;
         cout << "Sein Vorname ist " << personzeiger->vorName << endl;
         cout << "Und sein Nachname ist " << personzeiger->nachName << endl;
    }
    


  • Danke vielmals 😃 du bist meine Rettung^^



  • Danke vielmals 😃 du bist meine Rettung^^

    Edit: Aber der Code funktioniert ja immer noch nicht 😕

    Hier Fehlermeldung

    too many arguments

    Edit: Hat sich erledigt, danke vielmals 🙂



  • nein ist er eigentlich nicht

    guck mal in zeile 17 und 18 in deinem code
    da deklarierst du dir 2 funktionen die du in deinem hauptprogramm benutzt und unten in der definition sehen sie anders aus (hier erwarten sie einen parameter)



  • picoG schrieb:

    Wir haben heute im Programmierkurs eine Aufgabe bekommen, die mich zur Verzweiflung bringt.

    Mich würde dieser Kurs auch zur Verzweiflung bringen, wenn er so ist, wie dein Code andeutet (char-Arrays statt Verwendung der Stringklasse, Zeiger wo nicht nötig...). Gerade die char-Arrays sind für Anfänger wirklich ein Problem.

    Aber ansonsten gibt es einiges was mir an deinen Code auffällt:
    1. Sauber einrücken erleichtert sowohl dir, als auch den Lesern, den Überblick (Code wird häufiger gelesen als geschrieben).
    2. Eine Vorwärtsdeklaration muss schon die gleiche Signatur wie die Definition aufweisen (z.B. bei den Funktionen personeingabe/personausgabe).
    3. Bei Funktionsaufrufen gibt man die Variablen, nicht die Typen an.
    4. Vermeide globale Variablen.

    Und im Forum: Verwende bitte die C/C++ Tags (cpp) statt die Code-Tags (code), für die bessere Lesbarkeit und Codehervorhebung.

    // Dieser Code verwendet std::string und Referenzen statt char-Arrays und Zeigern...
    // [ungetestet]
    #include <iostream>
    #include <string>
    
    using namespace std; // <-- Bitte niemals in Headern verwenden
    
    struct Person
    {
        string vorname;
        string nachname;
        int alter;
    };
    
    void personeingabe(
        Person & person);
    void personausgabe(
        Person const & person);
    
    int main()
    {
        Person person;
        personeingabe(person);
        personausgabe(person);
    
        cin.get();
        system("pause");
        return 0;
    }
    
    void personeingabe(
        Person & person)
    {
        cout << "Bitte geben sie ein alter ein:" << endl;
        cin >> person.alter;
        cout << "Bitte geben sie einen Vornamen ein:" << endl;
        cin >> person.vorname;
        cout << "Bitte geben sie einen Nachnamen ein:" << endl;
        cin >> person.nachname;
    }
    
    void personausgabe(
        Person const & person)
    {
        cout << "Die Person ist " << person.alter << " Jahre alt." << endl;
        cout << "Sein Vorname ist " << person.vorname << endl;
        cout << "Und sein Nachname ist " << person.nachname << endl;
    }
    


  • Naja, ich habe den Code nicht analysiert und auch nicht kompiliert, sondern mich lediglich auf die im Eingangspost gestellte Frage nach den Zeigern konzentriert.

    Ich persönlich habe die main - Funktion immer als Letztes im Quellcode und kann dann weitestgehend auf Vorwärtsdeklarationen verzichten.

    Also, wenn's noch nicht gehen sollte (siehe Skym0sh0's Hinweis), meld Dich noch mal.
    Es ist übrigens immer hilfreich, zu den Fehlermeldungen auch die passenden Zeilennummern anzugeben.


Anmelden zum Antworten