Exponent einer Potenzzahl bestimmen
-
ich habs hier reingeschrieben damit mir jemand hilft.witze brauch ich net und wenn du hier nur sowas schreiben willst ist das vollig unnötig
-
wenn du keine witze ernten willst, dann lern dich genauer auszudrücken, und sinnvolle (und vor allem verständliche) problembeschreibungen zu schreiben.
-
In dem Programm wird nicht auf einen Buchstaben gewartet.
#include <iostream> #include <cmath> // Funktionen aus math.h im std namespace. int main() { 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; // sollte mit einem Standardwert initialisiert werden, um bei falscher Eingabe keinen Fehler zu bekommen std::cin >> zahl; std::cout << "Exponent:" << std::flush; // std::endl; s.o. double exp = 0.0; // s.o. std::cin >> exp; std::cout << std::pow(zahl, exp) << std::endl; // pow liegt im namespace std. ... cmath! std::cin.get(); // getch(); das ist Windows-Müll // return 1; Warum? Ist ein Fehler aufgetreten? Muss wenn dann 0 zurückgeben. Bei main aber nicht notwendig! }
-
Summernoon schrieb:
In dem Programm wird nicht auf einen Buchstaben gewartet.
-
Summernoon schrieb:
// getch(); das ist Windows-Müll
das heisst ja auch getchar() oder getc(stdin)
OP: nächstes mal stellste solche fragen im ansi-C forum, da hätteste keine 4 seiten gebraucht
-
Wartet leider immernoch nicht auf eine Taste.
#include <iostream> #include <cmath> int main() { std::cout << "Zahl: " << std::flush; double zahl = 0.0; std::cin >> zahl; std::cout << "Exponent:" << std::flush; double exp = 0.0; std::cin >> exp; std::cout << std::pow(zahl, exp) << std::endl; getchar(); }
-
ersetz mal dein einzelnes getchar() durch:
while (getchar() != '\n'); // reste im inputbuffer entfernen getchar(); // auf taste warten
-
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