getch & flushen
-
Hallo,
Ich hab da ein Problem!
Wenn ich die Konsole mit
std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail());
zurücksetze klappt das, außer ich nutze "getch()"...
Muss ich da etwas anders machen?
#include <iostream> #include <conio.h> int iquadrat(int izahl); int main() { int ieingabe; int iausgabe; char cdone='j'; std::cout << "Quadrat rechnen:" << std::flush; while (cdone=='j') { std::cout << "\nVon was? => " << std::flush; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin >> ieingabe; iausgabe=iquadrat(ieingabe); std::cout << iausgabe << std::flush; std::cout << "\nNochmal?(j/n)" << std::flush; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); cdone=_getch(); } return 0; } int iquadrat(int izahl) { return (izahl*izahl); }
-
Ist das vll. eher was für das normale C++-Forum?
-
karl heinz schrieb:
...außer ich nutze "getch()"...
Muss ich da etwas anders machen?ungefähr so:
int c; while ((c = getchar()) != '\n' && c != EOF);
-
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland a.cpp: Error E2272 a.cpp 31: Identifier expected in function main() Error E2451 a.cpp 31: Undefined symbol '_streams' in function main() Error E2268 a.cpp 31: Call to undefined function '_fgetc' in function mai n() Error E2188 a.cpp 31: Expression syntax in function main() *** 4 errors in Compile ***
Line 31:
while ((cdone = getchar()) != '\n' && cdone != EOF);
-
hast du auch <stdio.h> included?
-
Nein, nur "cstdio"
Mit stdio.h:
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland a.cpp: Error E2272 a.cpp 32: Identifier expected in function main() Error E2188 a.cpp 32: Expression syntax in function main() *** 2 errors in Compile ***
-
poste doch mal den ganzen code...
-
#include <iostream> #include <conio.h> #include <stdio.h> //#include <cstdio> int iquadrat(int izahl); int main() { int ieingabe; int iausgabe; char cdone='j'; std::cout << "Quadrat rechnen:" << std::flush; while (cdone=='j') { std::cout << "\nVon was? => " << std::flush; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin >> ieingabe; iausgabe=iquadrat(ieingabe); std::cout << iausgabe << std::flush; std::cout << "\nNochmal?(j/n)" << std::flush; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); while ((cdone = getchar()) != '\n' && cdone != EOF); } return 0; } int iquadrat(int izahl) { return (izahl*izahl); }
-
wow, extrem viel 'std::' drin, probier mal so:
#include <stdio.h> #define iquadrat(z) ((z)*(z)) int main() { int ieingabe; int cdone='j'; puts ("Quadrat rechnen:"); while (cdone=='j') { printf ("\nVon was? => "); scanf ("%d", &ieingabe); printf ("%d\nNochmal?(j/n)", iquadrat(ieingabe)); while (getchar() != '\n'); // <--- drain stdin cdone = getchar(); } }
-
Naja,
wartet jetzt zwar auf [enter], läuft sonst aber gut!
Danke!
-
#define iquadrat(z) ((z)*(z))
Ganz Böses Makro, ganz Böse.
// schlecht ersichtlich was passiert wenn man sowas schreibt int k = iquadrat(++z)
Abgesehen von der Umgehung der Typkontrolle durch den Präprozessor.
-
makrosKönnenBöseSein schrieb:
// schlecht ersichtlich was passiert wenn man sowas schreibt int k = iquadrat(++z)
mein fehler. ich hätte das makro GROSS schreiben sollen. dann erkennt man, dass es ein makro ist und vermeidet sowas.
-
Und wieso sollte ich ein Makro schreiben, wenn ich auch eine Funktion schreiben kann?
-
Helium schrieb:
Und wieso sollte ich ein Makro schreiben, wenn ich auch eine Funktion schreiben kann?
eine funktion, nur um einen wert mit sich selbst zu multiplizieren?
das finde ich etwas übertrieben.
-
inline
-
langeweile schrieb:
inline
__forceinline
http://blogs.msdn.com/doronh/archive/2006/02/16/533933.aspx
-
Weder inline noch __forceinline. Mein Compiler expandiert den Code sogar ohne inline oder __forceinline.