cin macht eine schleife ôo
-
#include <iostream> using namespace std; int main() { bool x; int y; while(x == false) { cout << "Eingabe: " << endl; cin >> y; if(y == 1) { x = true; } } return 0; }
Wenn man da Strings o.ä. eingibt das nicht den Werten eines Intenger entspricht, macht die Schleife bei den Durchläufen kein Stop mehr. Man hat also auch nicht mehr die Möglichkeit seine Eingabe zu korregieren(was ich eigentlich damit erzielen wollte). Wie kann ich das unterdrücken?
-
Also so wie ich das sehe, sollte das while abgebrochen werden, wenn der user eine "1" eingibt. Bei allen anderen eingaben wird nicht abgebrochen.
sprich du willst den user "zwingen" eine "1" einzugeben.Wolltest du das so haben?
-
nob6 schrieb:
#include <iostream> using namespace std; int main() { bool x; int y; while(x == false) { cout << "Eingabe: " << endl; cin >> y; if(y == 1) { x = true; } } return 0; }
Du benutzt x schon, bevor du ihm was zugewiesen hast. Würd mich schwer wundern, wenn dein Compiler dich nicht warnen würd.
-
Der warnt mich nicht(Dev-C++ V4.9.9.1).
Gib einfach mal true in die while schleife ein -> wird gleich abgebrochen.@newkid
Genau
-
Das selbe Problem hatte ich früher bei einen meiner Programme auch....
--> Bei dir spinnt das Programm dann bestimmt oder so wenn du nen string reinschreibt........
Ich denke das liegt ja wohl daran das y als Integer deklariert ist und du kannst darein dann wohl schlecht nen string reinspeichern
-
hmm
stimmt mit dem integer und stringd.h. bool ist default immer false
hmm ich mach trozdem immer ne "saubere" deklaration und schreibe = false rein. dann stimmt auf jedenfall immer bei allen compilern.
-
jo,
es liegt an der int deklaration.
einer integer variable kannst du ned einfach einen character übergeben.
deklarier y als char. musst dann aber auch die codestelle wo du vergleichst abändern, chars kannst ned so einfach wie vergleichen.
hoffe das beantwortet deine frage.und @ newkid:
es is echt egal ob ers noch dazuschreibt, wie schon erwähnt default = false
aber wenns spass macht.mfg Mindphreaker!
-
jup macht spass
mehr code of lineswieso nicht so einfach vergleichen?
das muesste doch genauso gehenif(y == "1") // was ist daran jetzt kompliziert?
Bye the way: bitte gewöhn dir aus spass "richtige" sprich aussagekräftige variablennamen an. ein x oder y ist nicht grad der hit.
besser z.b.
if(eingabe == "1")
-
es liegt an der int deklaration.
einer integer variable kannst du ned einfach einen character übergeben.
deklarier y als char. musst dann aber auch die codestelle wo du vergleichst abändern, chars kannst ned so einfach wie vergleichen.
hoffe das beantwortet deine frage.was sagt dir folgende deklaration?
class basic_istream{ //... basic_istream& operator>> (int& val ); //... }
versuchs mal so:
//ich erlaube mir mal, das ganz zu vereinfachen #include <iostream> using namespace std; int main() { int y=0; while(y != 1) { cin.ignore(cin.rdbuf()->in_avail());//streambuffer leeren cout << "Eingabe: " << endl; cin >> y; } return 0; }
-
nob6 schrieb:
bool x; while(x == false) {
Zugriff auf uninitialisierte Variable "x".
Richtig muss es heissen:
bool x = false; // "x" muss einen Wert haben while(x == false) {
Sonst hat "x" einen zufaelligen Wert, der meist ungleich 0 (false) ist.
-
Sonst hat "x" einen zufaelligen Wert, der meist ungleich 0 (false) ist.
false ist bei bool default, wie hier schonmal erwähnt wurde
-
newkid schrieb:
d.h. bool ist default immer false
otze schrieb:
false ist bei bool default, wie hier schonmal erwähnt wurde
Nope. Ein uninitialisiertes lokales bool hat einen undefinierten Wert.
C++ Standard schrieb:
Using a bool value in ways described by this International Standard as ‘‘undefined,’’ such as by examining the value of an uninitialized
automatic variable, might cause it to behave as if is neither true nor false.
-
newkid schrieb:
if(eingabe == '1') // <--- Aber so
[/cpp]
-
Whoa. Ist der gebufferte-Eingabe-Kram nicht langsam nen FAQ-Eintrag wert?
#include <sstream> #include <string> template<typename result_t> result_t read_from_cin(std::string const &prompt) { std::string eingabe; std::stringstream sstr; result_t ret; do { sstr.clear(); std::cout << prompt << std::flush; std::getline(std::cin, eingabe); sstr.str(eingabe); sstr >> ret; } while(!sstr); return ret; } // ... int x = read_from_cin<int>("Integer eingeben: ");
-
newkid schrieb:
Bye the way: bitte gewöhn dir aus spass "richtige" sprich aussagekräftige variablennamen an. ein x oder y ist nicht grad der hit.
Für Hilfsvariablen, die keine besonderen Daten speichern, gibt es meist keinen sinnvollen Namen. Solche Variablen heißen dann meist n,m,x,y oder tmp
Ausserdem sollte das nur ein Beispiel werden
Hab den Lösungsweg von Otze genommen, weil der wohl am besten für meine Zwecke geeignet ist
Btw. werd ich das mit der bool Sache ab jetzt berücksichtigen