Wieso funkioniert mein getchar(); nicht ?



  • Hallo hier mein \1:

    // pfunds.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    #include <Windows.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[]) {
    
    	int auswahl;
    	double kg;
    	double pound = 0.45359237;
    
    		do {
    
    		cout << "1. Pfund in Kg" << endl
    			 << "2. Kg ind Pfund" << endl
    			 << "\nWahl: ";
    
    		cin >> auswahl;
    
    			switch (auswahl) {
    
    			case 1:
    				system("cls");
    				cout << "Kilogramm: ";
    				cin >> kg;
    
    				system("cls");
    				cout << kg << " Kilogramm = " << kg / pound << " Pfund";
    				getchar();
    				system("cls");
    				break;
    
    			case 2:
    				system("cls");
    				cout << "Pfund: ";
    				cin >> kg;
    
    				system("cls");
    				cout << kg << " Pfund = " << kg * pound << " Kilogramm";
    				getchar();
    				system("cls");
    				break;
    			}
    
    		} while (auswahl != 0);
    
    	getchar();
    	return 0;
    }
    

    Vielleicht nicht das beste, das ist mir klar.

    Mein getchar funktioniert nicht in (Zeile - 36 & 47,
    an was liegt das ? Bitte um Hilfe

    Mfg



  • Du solltest "funktioniert nicht" etwas genauer beschreiben.
    Bei mir funktioniert getchar() z.B. auch nicht wenn ich beispielsweise meinen Computer nicht eingeschaltet habe.
    Ich gehe mal stark davon aus, dass es sich bei dir um eine andere Form von "geht nicht" handelt.

    Finnegan



  • Hängt im Puffer noch ein Zeichen, dass sich getchar schnappt. Mach mal vor getchar

    std::cin.ignore(std::limits<std::streamsize>::max());
    


  • Es geht sofort weiter es Wartet nicht auf eine Eingabe von mir, sondern ignoriert seine Pause .



  • Du könntest das Problem so lösen :

    cin.ignore();
    	cin.clear();
    	cin.get();
    

    Dann wartet das Programm bis du mit Enter bestätigst



  • Danke geht jetzt, aber wieso geht das nicht nur mit getchar(); ? sollte das nicht auch nur damit gehen ?

    Komisch..



  • Die Antwort darauf hat die "out" schon geliefert. Da hängt noch ein Zeichen im Tastaturpuffer ... und zwar sehr wahrscheinlich halt deine Eingabe mit "Enter".



  • wo läge dann der fehler bzw das Zeichen dass getchar zuerst schnappt ? wie kann ich das als anfänger verstehen ? sorry :|



  • Ok. Mal was ausführlicher ...

    Du füllst mittels ...

    cin >> kg;
    

    ... deine Integer Variable namens "kg", in dem du dort eine ganze Zahl eingibst, wie z.B. 10. Abschliessen tust du deine Eingabe aber mit der Entertaste.

    Der Inputstream weiss halt an der Stelle (s. oben), dass er eine Zahl auslesen soll aus dem Eingabestrom. Also holt der sich aus dem Eingabestrom / Tastaturpuffer, die 10 raus und lässt das "Enter" erstmal im Stream/Tastaturpuffer stehen.

    Wenn du dann die Funktion getchar() aufrufst, guckt die in den Tastaturpuffer und sieht dann noch dein vorher eingegebens "Enter". Für dich sieht es dann erstmal so aus, als wenn dein getchar() nicht funktionieren würde, was es aber an sich durchaus tut. Halt nur anders als erwartet.

    Ich hoffe, dass ich das jetzt nicht zu falsch erklärt habe.



  • Danke für die ausführliche erklärung ! 🙂 jetzt versteh ich das erst.


  • Mod

    Nirndor schrieb:

    Du könntest das Problem so lösen :

    cin.ignore();
    	cin.clear();
    	cin.get();
    

    Dann wartet das Programm bis du mit Enter bestätigst

    Das clear an der Stelle macht keinen Sinn.



  • was macht denn ein cin.clear genau ?

    mfg


  • Mod

    zantes schrieb:

    was macht denn ein cin.clear genau ?

    Wie könnte man so etwas wohl selber herausfinden?


Log in to reply