Kann mir jemand helfen? Bin Anfänger
-
ok, hab das jetz mal so gemacht wie du gesagt hast.
Da bringt er mir aber eine Fehlermeldung und bricht sofort ab.
Vorher konnt ich noch die werte eingeben.
-
FloWe schrieb:
int main (void) { int a=0,b=0,c=0,d=0; cout << "Geben Sie die Seitenlängen des Feldes ein: \n"; cin >> a >> b; c=a*b; cout << "Die Flaeche des Feldes beträgt " << c << "m²"; getchar(); }Allerdings schließt sich bei mir das Ausgabefenster sofort wieder. Müsste es nicht durch das getchar() auf eine beliebige Tastertureingabe warten?
Also, lass uns das mal analysieren:
getchar, will, wie es der Name schon sagt, ein Zeichen.
2. Du gibst z.B. ein: 3-enter-5-enter.
3. Im Puffer stehen nun 4 Zeichen.abekommt die 3. Das ersteenterwird ignoriert, da deroperator>>standardgemäß führende Whitespaces ignoriert.bbekommt nun den Wert 5. Um das letzteenterkümmert sich aber niemand, es bleibt im Puffer stecken.getcharwill ein Zeichen, und es bekommt das im Puffer steckendeenter.
Gut, nun wissen wir, wo das Problem liegt. Die Lösung ist, wie so oft: Was feststeckt muss entfernt werden. Heißt, wir reinigen den Puffer:
cin.ignore(64,'\n'); // 64 habe ich nun beliebig gewählt. Du kannst auch jede andere Zahl wählen, natürlich min. 1. getchar();
-
Ahhhh, Danke

find ich trotzdem etwas seltsam dass das zweite enter nicht auch dem zweiten wert zugeordnet wird. naja. wieder was gelernt
Danke
-
FloWe schrieb:
Ahhhh, Danke

find ich trotzdem etwas seltsam dass das zweite enter nicht auch dem zweiten wert zugeordnet wird. naja. wieder was gelernt
Hää, was hat Enter mit einer Ganzzahl am Hut?
-
ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.
-
FloWe schrieb:
ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.
Richtig.
Aber wie mein Vorposter schon geschrieben hat, ignoriert operator>> das Whitespace \n. Da du aber beim Einlesen von b Enter drückst, bleibt dies im puffer hängen, da kein operator>> mehr folgt.gruß
syntax
-
FloWe schrieb:
ich muss ja mit Enter die eingabe des wertes bestätigen, oder nicht? Sonst bleibt ja das programm an der stelle stehen wo ich den wert für 'b' eingeben soll.
Jain. Du musst dir das so vorstellen. Alles was du mit
cineinließt, landet in einem Stream. Ein Stream ist eine Aneinanderreihung von Zeichen. Nun gibt es Funktionen, mit denen du Zeichen aus dem Stream rausziehen kannst.operator>> cin.get(); getchar();Diese Funktionen sind immer dann zufrienden, wenn sie ein Zeichen aus dem Stream bekommen. Ob nun du ein Zeichen eingibst oder ob bereits eines vorhanden ist, interessiert nicht. Alle Zeichen die du eingibst, haben erstmal nichts miteinander zu tun und sind unabhängig voneinander. Was zusammen gehört entscheidet dann der Datentyp, den du haben willst. Du willst eine Ganzzahl, du bekommst eine Ganzzahl.
Enterhat mit einer Gnazzahl nichts am Hut.Enterist ein normales Zeichen.
-
ahhja, gut zu wissen
eine frage hätte sich da gerade noch aufgetan.
bei dem "cin.ignore(64,'\n');", was bewirkt der wert? gzw warum beötige ich zum ignorieren überhaupt einen wert?
-
FloWe schrieb:
eine frage hätte sich da gerade noch aufgetan.
bei dem "cin.ignore(64,'\n');", was bewirkt der wert? gzw warum beötige ich zum ignorieren überhaupt einen wert?http://www.c-plusplus.net/forum/p2218954?highlight=ignorieren#2218954
-