getchar() wird einfach im Porgramm übersprungen, muss 2 mal geschrieben werden warum das ?
-
Also habe grade angefange c++ zu lernen und bei mir überspringt der einfach das "getchar();".Ich habe weitere versuche vollzogen und habe bemerkt das ich es 2 mal schreiben muss. Kann mir jemand sagen warum das so ist und ob es nicht noch einen anderen, sicherern Weg gibt.

Hier mein Code der überspungen wird:#include <iostream> #include <string> using namespace std; int main() { int iZahl1; int iZahl2; int iErgebnis; cout << "Geben sie 2 Zahlen zum addieren ein!" << endl; cin >> iZahl1; cin >> iZahl2; iErgebnis = iZahl1 + iZahl2; cout <<"Hallo das Ergebnis liegt bei " << iErgebnis << endl; getchar(); return 0; }Und hier der der geht:
#include <iostream> #include <string> using namespace std; int main() { int iZahl1; int iZahl2; int iErgebnis; cout << "Geben sie 2 Zahlen zum addieren ein!" << endl; cin >> iZahl1; cin >> iZahl2; iErgebnis = iZahl1 + iZahl2; cout <<"Hallo das Ergebnis liegt bei " << iErgebnis << endl; getchar(); getchar(); return 0; }Mfg. lucas
-
cin entfernt das abschließende "Return" der Eingaben nicht aus dem Buffer. Sprich wenn getchar() das erste mal aufgerufen wird, liest er das "Return" aus. getchar() entfernt es allerdings aus dem Buffer, woraufhin es so aussieht, als ob das erste getchar() übersprungen wird und nur das zweite was macht.
Daher hab ich bisher immer versucht das mischen von getchar() und cin zu vermeiden, aber vielleicht gibts bessere optionen.
-
Versuch es doch mal mit std::cin.sync() und danach std::cin.get() statt getchar()
-
Auf diese
waitFunktion kannst du dich verlassen.
#include <iostream> #include <limits> void wait() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); std::cin.get(); } int main() { wait(); }
-
Gugelmoser schrieb:
Auf diese
waitFunktion kannst du dich verlassen.
#include <iostream> #include <limits> void wait() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); std::cin.get(); } int main() { wait(); }Vielen danke! So funktioniert es. Kannnst du mir vielleicht nich erklären wie das funktioniert? Es sieht für mich wie ne Funktion aus (kenne fast nichts in c++ aber habe mit php erfahrung gesammelt) ist das auch ein?

-
TheKingPommes schrieb:
Vielen danke! So funktioniert es. Kannnst du mir vielleicht nich erklären wie das funktioniert? Es sieht für mich wie ne Funktion aus (kenne fast nichts in c++ aber habe mit php erfahrung gesammelt) ist das auch ein?

Ja, das ist eine Funktion.
voidist der Rückgabedatentyp.waitist der Name der Funktion.()ist die Parameterliste, die in diesem Fall leer ist, d.h. die Funktion erwartet bei einem Aufruf keine Arugmente.-std::cin.clear(): Setzt
cinin seinen gültigen Zustand zurück.cinwäre z.B. in einem ungültigen Zustand, wenn du eine Ganzzahl (int) einlesen möchtest, stattdessen aber ein Zeichen (char) eingibst.-std::cin.ignore(...): Verwirft im Puffer steckende Zeichen, z.B. zurückgebliebene
Enter.-std::cin.get(): Wartet auf eine Eingabe.