while verursacht Endlosschleife



  • Hallo Community!

    Muss leider noch ne Anfängerfrage stellen. Hab jetzt bereits über 2h investiert um das Problem zu lösen.

    Folgender Code:

    #include <string>
    #include <iostream>
    using std::cin;
    using std::cout;
    using std::string;
    using std::endl;
    main()
    {
    string satz;
    int entscheidung=1;
    while (entscheidung==1) 
    {
    getline(cin, satz);
    cout << satz << endl;
    cout << "1 für nochmal";
    cin >> entscheidung;}
    return 0;
    }
    

    Sinn der Whileschleife sollte sein, dass wenn man bei "entscheidung" den Wert 1 eingibt nochmals die Möglichkeit besteht eine Zeichenfolge einzugeben. Wenn man irgendetwas anderes !=1 eingibt soll das Programm beendet werden.

    Leider verhält es sich so, dass bei Eingabe von 1 die Frage immerwieder gestellt wird, das Programm also nicht den While - Rumpf zwischen den {..} wiederholt.

    Gebe ich keinen Integerwert für entscheidung an, verursacht das eine Endlosschleife und "1 für nochmal" wird immerwieder (endlos) ausgegeben.

    Kann mir jemand erklären, was ich hier wieder falsch mach 😞

    Vielen Dank!



  • Du solltest die Streams auf Fehlerflags prüfen (z.B. eof() ), um ihren Status abzufragen. Wenn nämlich eine Eingabe nicht funktioniert hat oder das Ende des Streams erreicht wurde (EOF), wird die Arbeit eingestellt.
    Debugger wäre auch nicht die schlechteste Idee.

    Übrigens: Welcher Compiler lässt das durchgehen?

    main()
    

    In C++ muss int explizit angegeben werden.

    Ausserdem dürfte das so sowieso nicht funktionieren, da getline() nicht definiert ist (wäre auch im Namensraum std , und hast du bei deinen using s vergessen).



  • Hallo!

    In der Tat , da hab ich doch glatt das int vergessen. Hm... g++ unter Debian Lenny lässt das durchgehen...

    Fehlerflags ok: Da muss ich noch einiges lernen (nachlesen) Sagt mir nämlich im Moment nicht viel.

    LG und Danke!


Anmelden zum Antworten