Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

1

18.02.2010, 17:45

cin.ignore Problem???

Hallo Leute!

Hoffe das mir wer helfen kann!
Nehme mir gerade Übungen zu Klassen vor. Diese Klasse besitzt Personaldaten als Membervariable. Alles funktioniert bis auf ein kleiner Fehler bei der Ausgabe. Bei der Ausgabe von Franz mittels Franz.print(); wird der erste Buchstabe weggeschnitten. Wieso ist der nicht mehr da?

Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <conio.h>
#include <vector>

using namespace std;

class CMitglieder{          //a) Klasse Mitglieder mit Membervariablen definiert

    
    private:
        char m_Vorname[30];
        char m_Nachname[30];
        int m_Alter;

    public:
        CMitglieder();  //b)Konstruktor

        /*void getVorname();        //c)get Funktion
        void getNachname();
        void getAlter();

        void setVorname();      //c)set Funktion
        void setNachname();
        void setAlter(); */

        void print();       //d)print Funktion 

};

CMitglieder::CMitglieder(){

    cout<<"Vorname: ";
    cin.ignore();
    cin.get(m_Vorname, 29);
    cout<<"Nachname: ";
    cin.ignore();
    cin.get(m_Nachname, 29);
    cout<<"Alter: ";
    cin>>m_Alter;
    cout<<endl;
}

void CMitglieder::print(){

    cout<<m_Vorname<<" "<<m_Nachname<<" ("<<m_Alter<<")"<<endl;
}

void main(){
    
    CMitglieder Franz;
    CMitglieder Sep;

    Sep.print();
    Franz.print();

    _getch();
}


mfg

2

18.02.2010, 18:07

Du musst cin.ignore benutzen nachdem du cin benutzt nicht davor. So passierts nicht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CMitglieder::CMitglieder(){ 

    cout<<"Vorname: "; 
    cin.get(m_Vorname, 29);
    cin.ignore(); 

    cout<<"Nachname: "; 
    cin.get(m_Nachname, 29);
    cin.ignore(); 

    cout<<"Alter: ";
    cin>>m_Alter;
    cin.ignore(); 
    cout<<endl; 
}

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

3

18.02.2010, 18:17

Danke, funktioniert!

Jetzt habe ich leider noch eine Frage:

Aufgabenstellung:
a) Definiere eine Klasse Mitglied mit den Informationen: Vorname, Nachname, Alter.
b) Schreibe einen passenden Konstruktor mit dem alle 3 Informationen gesetzt werden
können.
c) Definiere get...() und set...() Methoden für die Instanzvariablen von Mitglied.

get und set Funktionen sind ja dafür da, das man auf die privaten Membervariablen zugreifen kann. Macht das hier überhaupt einen Sinn solche Funktionen zu schreiben, wenn schon im Konstruktor die Eingaben gemacht werden?

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

4

18.02.2010, 18:23

Zitat von »"franz-21"«


get und set Funktionen sind ja dafür da, das man auf die privaten Membervariablen zugreifen kann. Macht das hier überhaupt einen Sinn solche Funktionen zu schreiben, wenn schon im Konstruktor die Eingaben gemacht werden?


Naja, solche Angaben können ja auch geändert werden. Da ist es doch praktisch, nicht immer alles zu löschen und neu zu machen, sondern einfach bereits vorhandene Daten zu verändern :].

5

18.02.2010, 18:24

Wenn deine Aufgabe ist, solche Funktionen zu schreiben, dann solltest du es auch tuen. Es macht schon Sinn, wenn man einzelne Werte verändern oder anzeigen lassen will. Wenn du etwas eigenes programmierst wirst du diese immer wieder brauchen. (Ist ja auch nur eine Formalität und sehr einfach ;) )

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

6

18.02.2010, 18:29

Danke, verwende eh immer setter und getter Funktionen nur ist mir das ein bisschen komisch vorgekommen bei diesen Beispiel. Mache es jetzt so das die setter und getter Funktionen mit den Konstruktor aufgerufen werden, so habe ich, finde ich, das Beispiel einigermasen gut gelöst :D

so:

C-/C++-Quelltext

1
2
3
4
5
6
CMitglieder::CMitglieder(){     //Konstuktor mit set-Funktions Aufrufen


    setVorname();
    setNachname();
    setAlter();
}

Werbeanzeige