cin >>, cin.ignore, getline(cin, ...)



  • Hallo allesamt,

    zunächst einmal zu mir: Ich bin blutiger C++-Anfänger und habe bisher lediglich ein wenig Programmierkenntnisse mit VBA und Delphi erworben. Ich versuche momentan mit Hilfe des Buches Grundkurs C++ von Jürgen Wolf einen ersten Einstieg in diese Sprache zu erlangen.

    Als IDE nutze ich Netbeans 8.0.2 mit MinGW als Tool Collection.

    Nun habe ich versucht ein einfaches Programm zu schreiben, mit dessen Hilfe man den Umfang und die Fläche eines Rechtecks errechnen kann. Dabei soll der Nutzer die Seitenlängen angeben und sich entscheiden, ob er den Umfang oder die Fläche ausgegeben bekommt.
    Nun zu meinem Problem: Wenn ich im folgenden Code getline(cin, wahl) nutze, um meine Variable wahl zu füllen, erhalte ich immer folgende Ausgabe

    Wollen sie den Umfang oder die Fläche des Rechecks berechnen ?Geben sie die Breite des Rechtecks an:
    

    und ich stecke in der Schleife fest. Wenn ich cin >> wahl nutze funktioniert, wird zwar die Schleife ordnungsgemäß ausgeführt, aber ich kann das Programm am Ende nicht mit Hilfe von cin.ignore() pausieren.
    Es wäre super, wenn mir hier einer erklären könnte, warum das nicht funktioniert und mir einen Tipp geben könnte, was stattdessen zu tun ist.

    Danke im Voraus,
    Jasper

    #include <iostream>
    #include <string>
    #include <limits>
    using namespace std;
    
    ...
    
    int main() {
    	double a{0}, b{0};
    	string wahl("");
    	bool ende;	
    	while(ende != true){
    		cout << "Geben sie die Breite des Rechtecks an: ";
    		cin >> a;
    		cout << "Geben sie die Höhe des Rechtecks an: ";
    		cin >> b;
    		cout << "Wollen sie den Umfang oder die Fläche des Rechecks berechnen? ";
    		getline(cin, wahl);
    		if (wahl == "Umfang"){
    			cout << "Der Umfang des Rechtecks beträgt: " << Umfang(a, b) << endl;
    			ende = true;
    		}	
    		else if (wahl == "Fläche"){
    			cout << "Die Fläche des Rechecks beträgt: " << Flaeche(a, b) << endl;
    			ende = true;
    		}
    	}
    
    	cout << "Zum Beenden ENTER drücken!";
    	cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    
    	return 0;
    }
    ...
    

  • Mod

    Jazzbear schrieb:

    zunächst einmal zu mir: Ich bin blutiger C++-Anfänger und habe bisher lediglich ein wenig Programmierkenntnisse mit VBA und Delphi erworben. Ich versuche momentan mit Hilfe des Buches Grundkurs C++ von Jürgen Wolf einen ersten Einstieg in diese Sprache zu erlangen.

    Gut, dass du das hier schreibst, bevor dir noch was schlimmes zustößt:
    https://www.c-plusplus.net/forum/272350

    Als IDE nutze ich Netbeans 8.0.2 mit MinGW als Tool Collection.

    Versuch mal dein Programm mit CTRL+F5 zu starten.



  • Hi SeppJ,

    Gut, dass du das hier schreibst, bevor dir noch was schlimmes zustößt:
    https://www.c-plusplus.net/forum/272350

    Dann ist ja gut, dass ich mir Vorgestern den C++ Primer von Stanley Lippman bestellt habe. 😃 Ich hatte sowas nämlich schon befürchtet.

    Zum zweiten Punkt: Wenn ich mit MinGW als Tool Box den Code starte bekomme ich

    During startup program exited with code 0xc0000135.

    Wenn ich Cygwin4.x nutze, kann ich zwar den Debugger starten, aber ich bin irgendwie zu doof den zu nutzen. Ich komme bis zur ersten Eingabeauforderung. Wenn ich dann versuche, eine Zahl einzugeben und mit Enter zu bestätigen, springt der Curser einfach in die nächste Zeile statt den Code fortzusetzen :(. Muss mich wohl nochmal intensiver mit Netbeans auseinander setzen. Ich hatte gehofft, dass läuft so nebenbei. Oder kannst du mir eine andere(bessere?) IDE empfehlen?

    Gruß,
    Jasper


  • Mod

    Jazzbear schrieb:

    During startup program exited with code 0xc0000135.

    Das deutet da drauf hin, dass irgendwelche Pfade nicht richtig gesetzt sind. Mehr kann ich persönlich dazu auch nicht sagen, siehe unten.

    Oder kannst du mir eine andere(bessere?) IDE empfehlen?

    Ich entwickele nicht unter Windows, also nicht wirklich. Visual Studio wird öfters empfohlen, kann ich aber nicht beurteilen.



  • das solltest du nicht machen

    bool ende;  
        while(ende != true){
    

Anmelden zum Antworten