Warum bleibt das Fenster nicht offen?



  • Hallo liebe Community, ich bin neu hier und bringe gleich mal eine Frage mit.

    Ich lerne mit dem Buch "Einführung in die programmierung mit C++" von Bjarne Stroustrup. Ich habe das Problem, dass in meiner Anwendung nach dem caracter output die Konsole nicht aufbleibt. Keine Angst, ich habe mich bereits informiert und weiß, wie ich sie offen halten kann - verstehe aber nicht, warum es auf folgendem Weg nicht funktioniert.

    Im Buch gibt es eine Headerdatei mit einer Funktion, zum offen halten des Fensters. Die Funktion heißt keep_window_open(); Diese funktioniert auch bei einem einfachen Programm mit caracter output.

    std_lib_facilities.h:
    
    #ifndef STD_LIB_FACILITIES_GUARD
    #define STD_LIB_FACILITIES_GUARD 1
    #include <iostream>
    using namespace std;
    inline void keep_window_open()
    {
        cin.get();
    }
    #endif // STD_LIB_FACILITIES_GUARD
    

    Jetzt arbeite ich mit Caracter input und irgendwie, scheint die Funktion mit dem offen halten des Fensters nicht mehr zu funktionieren.

    Mein Programm:

    #include "std_lib_facilities.h"
    #include <string>
    
    int main(){
    
    	cout << "Bitte geben Sie einen Vornamen ein (gefolgt von'Enter'):\n";
    	string first_name; // first_name ist eine Variable vom Typ String
    	cin >> first_name;
    	cout << "first_name ist: " << first_name << "!\n";
    	keep_window_open();
    
    	return 0;
    }
    

    Ich habe natürlich auch andere Varianten im Internet entdeckt, wie z.B system("pause"), was wohl aber nicht so elegant sein soll. Auch habe ich die Header Datei umgeschrieben und zwar statt cin.get(); mit char test; cin >> test;
    Das hat zwar soweit funktioniert, aber ich muss dann eben noch einen Buchstaben eingeben statt einfach nur das Programm mit Enter zu beenden. Wie auch immer.

    Es lenkt vom eigentlichen Thema ab, ich würde gerne wissen - warum die oben genannte Funktion innerhalb meiner Anwendung nicht das tut, was ich mir vorstelle ( und zwar das offen halten des Fensters mit der Ausgabe von "fist_name" bis ich per Eingabe bestätige.

    Ich benutze Visual C++ Express von Microsoft als IDE.
    Ich freue mich über eure Hilfe!

    Liebe Grüße

    eots



  • Huhu,
    das Problem ist, dass da noch Zeichen im Puffer stecken (Zeichen, die noch nicht verarbeitet wurden). D.h. er wartet nicht auf deine Eingabe, sondern nimmt einfach ein Zeichen, das noch im Puffer steckt.

    Lösung: Die noch im Puffer stehenden Zeichen verwerfen oder ignorieren.

    #include <iostream>
    #include <limits>
    int main()
    {
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        std::cin.get();
        return 0;
    }
    


  • Hallo,

    das leuchtet ein. Ich habe meine Headerdatei entsprechend umgeschrieben und nun funktioniert es. Vielen Dank.

    Liebe Grüße

    eots


Anmelden zum Antworten