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.


Log in to reply