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

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

11

29.10.2009, 22:23

wer behauptet denn, dass die operatoren nen bool wert zurück geben?

"cin.good()" gibt einen bool-wert zurück aber das ist ja ne normale memberfunktion.

12

29.10.2009, 22:48

Zitat von »"Faule Socke"«

Kann mich einer aufklären?
Die Streams besitzen einen operator void*, der Ausdrücke folgender Art erlaubt:

C-/C++-Quelltext

1
2
if (Stream)
if (OutputStream >> Var)

Stichwort Safe Bool Idiom. Informationen zu den Memberfunktionen gibts wie üblich auf www.cplusplus.com.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

13

30.10.2009, 12:23

Zitat von »"NachoMan"«

wer behauptet denn, dass die operatoren nen bool wert zurück geben?


Das Tutorial http://www.arachnoid.com/cpptutor/student1.html behauptet das:

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
#include <iostream>

using namespace std;

int main()
{
    int x = 0;
    do {
        cout << "Enter a number (-1 = quit): ";
        if(!(cin >> x)) {
            cout << "The input stream broke!" << endl;
            x = -1; // jump out of do ... while

        }
        if(x != -1) {
            cout << "You entered " << x << endl;
        }
    }
    while(x != -1);
    cout << "Quitting program." << endl;
    
    return 0;
}


Socke

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

14

30.10.2009, 12:26

achso ^^ so genau hab ich mir das nicht angesehen. wieder was gelernt *-*

15

30.10.2009, 14:32

Zitat von »"Faule Socke"«

Zitat von »"NachoMan"«

wer behauptet denn, dass die operatoren nen bool wert zurück geben?
Das Tutorial http://www.arachnoid.com/cpptutor/student1.html behauptet das:
Nein, das stimmt nicht. Weder operator<< noch operator>> geben einen bool zurück!

Im Tutorial steht:

Zitat

Like all C++ streams, the stream "cin" returns the boolean value "false" if the input operation fails.
Und das ist ziemlich ungenau und wird deshalb leicht missverstanden. Wie will ein Objekt einen Wert zurückgeben? Das sind die Memberfunktionen operator! oder operator void* (letzterer gibt logischerweise keinen bool-Wert zurück).

Zitat von »"NachoMan"«

achso ^^ so genau hab ich mir das nicht angesehen. wieder was gelernt *-*
Du hast gerade was Falsches gelernt, vergiss das lieber schnell wieder.

Habt ihr meinen Post eigentlich nicht gelesen?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

16

30.10.2009, 14:40

schon klar, dass sie keinen bool wert zurück geben...
ich hab gelernt, dass man einen operator void* und operator! überschreiben kann.
ich werds mir genauer an schauen wenn ichs brauche und mehr erfahrung habe^^

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

17

31.10.2009, 10:08

Achja stimmt, daher auch die klammer... der operator gibt ja nur den Stream zurück und auf den bezieht sich dann das !. Muss wohl aufmerksamer lesen ;-)

Socke

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

18

01.11.2009, 13:31

Junge Junge Junge, die hier gezeigten Lösungen erinnern mich irgendwie an die Aussage von deutschen MVP Frank Eller im MSDN-Blog: "It's like grabbing at your eyes from behind through your a**"

Hier mal was Anständiges:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename T> T user_input (const std::string& label)
{
    T result = T ();

    while ((std::cout << label) && !(std::cin >> result) || std::cin.peek() != '\n')
    {    
        std::cout << "> Eingabe ist nicht korrekt!" << std::endl;
        std::cin.clear();
        std::cin.ignore();
        std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
    }

    return (result);
}

// [...]


std::string value1 = user_input<std::string>("string");
float value2 = user_input<float>("float");
int value3 = user_input<int>("int");

Werbeanzeige