Exponent einer Potenzzahl bestimmen
-
danke ! geht wunderbar! ist das mit dem inputbuffer leeren optimal ?
-
wo sind wir denn hier gelandet
int main() { // blabla std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return 0; }
-
Checker&Murckser schrieb:
int main() { // blabla std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return 0; }
Naja, diesen Code habe ich nie sonderlich gemocht. Bei vielen Leuten tut der Code nicht das was er tun soll.
Die bessere Alternative ist die hier:
cin.clear(); cin.ignore ( std::numeric_limits<std::streamsize>::max(), '\n'); cin.get();
Habe ich auch schon desöfteren hier gesehen.
Darf ich eigentlich jetzt einfach in die betroffene FAQ anworten/reinschreiben?
-
KasF schrieb:
Darf ich eigentlich jetzt einfach in die betroffene FAQ anworten/reinschreiben
?
Wohl eher nicht:
<a href= schrieb:
http://www.c-plusplus.net/forum/viewforum-var-f-is-20.html (rechts unten)">Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum mitmachen.
-
nur mal so am rande:
(D)Evil schrieb:
std::cout << "Zahl: " << std::flush; // std::endl; ist hier falsch, da du damit auch direkt ein Newline in den Stream packst. double zahl = 0.0; std::cin >> zahl;
...
hier braucht man kein std::flush weil cin und cout getied sind. vor jedem cin wird automatisch cout geflushed.
-
I know ... hab es so aber lieber ... sorry ist Gewohnheitssache ^^
-
So wollte das gerade umbauen, verstehe allerdings nicht ganz warum der Code unbedingt funktionieren muss. Sind zwei Zeilen im Eingabepuffer und wird wait() ausgeführt, schließt sich die Konsole wieder automatisch.
Warum soll das schon, die derzeit in der FAQ vorgestellte Variante aber nicht funktionieren?
MfG SideWinder
-
SideWinder schrieb:
So wollte das gerade umbauen, verstehe allerdings nicht ganz warum der Code unbedingt funktionieren muss. Sind zwei Zeilen im Eingabepuffer und wird wait() ausgeführt, schließt sich die Konsole wieder automatisch.
Warum soll das schon, die derzeit in der FAQ vorgestellte Variante aber nicht funktionieren?
MfG SideWinder
Ist das auf mich bezogen ? Wenn ja wieso schreibst du nicht in diesen Thread weiter wo wir aufgehört hatten
: http://c-plusplus.net/forum/viewtopic-var-t-is-183666.html
-
KasF schrieb:
Checker&Murckser schrieb:
std::cin.ignore(std::cin.rdbuf()->in_avail());
Naja, diesen Code habe ich nie sonderlich gemocht. Bei vielen Leuten tut der Code nicht das was er tun soll.
Die bessere Alternative ist die hier:
cin.ignore ( std::numeric_limits<std::streamsize>::max(), '\n');
Ah … sollten die Codes nicht eigentlich dasselbe machen? Oder gibt es Implementierungen, in denen 'in_avail' das falsche Resultat liefert?
-
Konrad Rudolph schrieb:
Oder gibt es Implementierungen, in denen 'in_avail' das falsche Resultat liefert?
Das ist der Fall!
-
Und deswegen sollte man nur noch das hier benutzen:
cin.clear(); cin.ignore ( cin.rdbuf()->in_avail() + 1,'\n' ); cin.get();
-
Weshalb? Im Konsolenpuffer kann durchaus mehr stehen als in_avail()+1 ergeben. Die +1 ändert in dem Fall garnichts.
-
Das ist ja das mysteriöse dabei. Ich habe mal ne ganze Weile damit rumgespielt.
Manchmal hat in_avail() eine 0 zurückgeben und das cin.get() hat danach nicht funktioniert.Sobald in_avail() != 0 war lief es ganz normal. Deswegen habe ich mir gedacht, ich mache da ein +1 und dann könne nichts schief gehen.
Und wenn ich dahin ein numeric_limits<streamsize>::max() hinschreiben würde, könnte es vorkommen das zweimal Enter gefordert wird.
cin.clear(); cin.ignore ( numeric_limits<streamsize>::max(), '\n'); cin.get();
Puffer leer -> ignore() wartet in dem Falle auf Eingabe von max() Zeichen oder ein \n -> Dann nochmal \n bei cin.get()
Wie gesagt, ich habe es auf einigen Compilern getestet und das war das einzige was überall funktioniert hat:
cin.clear(); cin.ignore ( cin.rdbuf()->in_avail() +1 , '\n'); cin.get();
Trust me
-
Das Problem bei in_avail() ist, das du nicht die größe des Rests im Konsolenpuffer bekommst sondern das was im Puffer von std::cin steht.
Eine Alternative wäre per std::getline() zu versuchen den Rest auszulesen.
-
David_pb schrieb:
Das Problem bei in_avail() ist, das du nicht die größe des Rests im Konsolenpuffer bekommst sondern das was im Puffer von std::cin steht.
Die Eingaben die ich über die Tastatur mache kommen auch noch in einen Konsolenpuffer ? Das wusst ich net.