Anfängerfrage: Beim Debuggen flackerts nur, wieso??



  • Fabolous12 schrieb:

    das liegt ganz einfach daran, dass der Compiler den Code durch geht und damit auch fertig ist. Du musst ihm sagen, dass er danach noch auf etwas warten soll, auf eine Eingabe zum Beispiel.

    Also einfach vor 'return 0' ein "cin.get();" schreiben.

    Danke! Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?



  • Someone01 schrieb:

    Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?

    Mit cin.get() wird gewartet, bis du das naechste Zeichen eingibst und dieses Zeichen wird eingelesen. Das haettest du aber ganz leicht selber mit Google herausgefunden 😉

    Welches Buch liest du denn?



  • Um ehrlich zu sein, ich hatte genau das selbe Problem wie du, als ich vor zwei Wochen wieder angefangen habe C++ mit meinem Buch zu lernen und ich kann es bis heute nicht nachvollziehen, warum die Autoren kein Wort darüber verlieren.

    'cin.get();' Wartet einfach nur auf eine Eingabe. Wenn du also eine beliebige Taste drückst wird sich das Programm schließen. Mit diesem Befehl wirst du dich früher oder später noch im Buch auseinander setzen, da bin ich mir ziemlich sicher. 🙂

    Edit: Sorry für den doppel Post - ich war zu langsam



  • Someone01 schrieb:

    Fabolous12 schrieb:

    das liegt ganz einfach daran, dass der Compiler den Code durch geht und damit auch fertig ist. Du musst ihm sagen, dass er danach noch auf etwas warten soll, auf eine Eingabe zum Beispiel.

    Also einfach vor 'return 0' ein "cin.get();" schreiben.

    Danke! Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?

    cin.get() wartet solange, bis du Enter drückst. Naja, wieso das nicht im Buch steht...
    1. Man kann nicht davon ausgehen, dass jeder das Programm so erstellt wie du. Z.B. kannst du das Programm über die cmd starten. Dann siehst du die Ausgabe ja in der Konsole.
    2. Du kannst das Projekt auch so einstellen (weiß grad nicht wie) dass automatisch gewartet wird, wenn du es von Visual Studio aus startest.

    ==> Was ich sagen will, jeder startet ein Programm anders. Manche brauchen die Hilfe von cin.get(), manche nicht. Dass kann der Buchautor ja nicht riechen, wer was macht.



  • Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was? 😃 Es gibt einfach keine perfekte Lösung in Verbindung mit cin .



  • out schrieb:

    Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was? 😃 Es gibt einfach keine perfekte Lösung in Verbindung mit cin .

    Schau dir einmal den Beitrag an, den ich oben verlinkt habe 😉



  • icarus2 schrieb:

    out schrieb:

    Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was? 😃 Es gibt einfach keine perfekte Lösung in Verbindung mit cin .

    Schau dir einmal den Beitrag an, den ich oben verlinkt habe 😉

    Was meinst du? Ja, da steht das schon mit ignore . Da steht aber nicht, dass man eventuell 2x Enter drücken muss.



  • out schrieb:

    Was meinst du? Ja, da steht das schon mit ignore . Da steht aber nicht, dass man eventuell 2x Enter drücken muss.

    Ich habe Visual Studio schon lange nicht mehr gebraucht... warum muss man unter gewissen Umstaenden zwei mal Enter druecken?



  • icarus2 schrieb:

    out schrieb:

    Was meinst du? Ja, da steht das schon mit ignore . Da steht aber nicht, dass man eventuell 2x Enter drücken muss.

    Ich habe Visual Studio schon lange nicht mehr gebraucht... warum muss man unter gewissen Umstaenden zwei mal Enter druecken?

    Das hat nichts mit dem Compiler zu tun. Das will der C++ Standard so. :p

    std::istream::ignore schrieb:

    Extracts characters from the input sequence and discards them, until either n characters have been extracted, or one compares equal to delim.

    #include <iostream>
    #include <limits>
    using namespace std;
    
    int main()
    {
    	cout << "Bitte 2x Enter druecken :P";
    
    	cin.ignore(numeric_limits<streamsize>::max(), '\n');
    	cin.get();
    }
    


  • out schrieb:

    Das hat nichts mit dem Compiler zu tun. Das will der C++ Standard so. :p

    👍 😉


Anmelden zum Antworten