Unverständnis über Verhalten bei do while Austrittsbedingung
-
Hallo zusammen,
ich bin C++ (und Programmiersprachen überhaupt) Anfänger. Nun hab ich hier eine do-while-Schleife und versteh nicht so ganz deren Verhalten bei diesem Stück Code:
int main(){ do{ zeichen = getch(); zeichenkette = zeichenkette + zeichen; cout << zeichen; }while(zeichen != char(13) || zeichen != char(99)); cout << endl << zeichenkette.toStdString(); }Die Schleife soll also solange Zeichen von der Tastatur lesen und das gelesene in die Variable zeichenkette anhängen und ausgeben solange ich keine Enter oder c Taste betätige, dann soll alles ausgegeben werden. char(99) (was ja c sein soll) hab ich nur als Test da angefügt. Ohne das c macht das Programm was ich von ihm erwarte, nämlich sobald Enter gedrückt wird, hört er mit dem einlesen auf und gibt alles eingegebene aus. Aber so wie es oben steht (mit dem c) hört er weder nach Enter noch nach c auf einzulesen. Nach Enter fängt er lediglich vom Anfang der Zeile wieder an einzulesen, was ich auch nicht verstehe.
Könnt ihr mir erklären was da vor sich geht?
Danke und Gruß
hexadezimal
-
Deine while Bedingung ist falsch. Überleg dir mal genau was passiert wenn char(13) oder char(99) daherkommt.
Tip: Deine Bedingung ist immer true egal welches Zeichen kommt.
-
...
-
Tanren schrieb:
Deine while Bedingung ist falsch. Überleg dir mal genau was passiert wenn char(13) oder char(99) daherkommt.
Tip: Deine Bedingung ist immer true egal welches Zeichen kommt.Hm. So wie ich es verstehe überprüft er bei char(13) ob die Enter-Taste betätigt wurde und bei char(14) ob die c-Taste betätigt wurde.
Swordfish schrieb:
hexadezimal schrieb:
[...] solange ich keine Enter oder c Taste betätige, [...]
... und warum stehen in deinem Code so komische Zahlen?
die hab ich aus der ASCII-Tabelle. Was hab ich falsch gemacht?
-
hexadezimal schrieb:
Hm. So wie ich es verstehe überprüft er bei char(13) ob die Enter-Taste betätigt wurde und bei char(14) ob die c-Taste betätigt wurde.
Du musst das schon etwas genauer anschauen so wird das sonst nichts mit dem programmieren.
Was mach denn das || ?
-
hexadezimal schrieb:
Tanren schrieb:
Deine while Bedingung ist falsch. Überleg dir mal genau was passiert wenn char(13) oder char(99) daherkommt.
Tip: Deine Bedingung ist immer true egal welches Zeichen kommt.Hm. So wie ich es verstehe überprüft er bei char(13) ob die Enter-Taste betätigt wurde und bei char(14) ob die c-Taste betätigt wurde.
Nein, du sollst nicht sagen, was du denkst, was es tut, sondern du sollst überlegen, was es tut!
Lassen wir mal die blödsinnigen Typumwandlungen weg, die machen sowieso nichts. Dann wird es etwas übersichtlicher:if (zeichen != 13 || zeichen != 99)In Worten: "Wenn Zeichen ungleich 13 oder wenn Zeichen ungleich 99
Nun überleg mal, in welchen der folgenden Fällen die Bedingung wahr oder falsch ist (und warum!):
1. Wenn Zeichen gleich 13 ist
2. Wenn Zeichen gleich 99 ist
3. Wenn Zeichen gleich 73 ist
4. Wenn Zeichen einen beliebigen Wert hat
-
Tanren schrieb:
hexadezimal schrieb:
Hm. So wie ich es verstehe überprüft er bei char(13) ob die Enter-Taste betätigt wurde und bei char(14) ob die c-Taste betätigt wurde.
Du musst das schon etwas genauer anschauen so wird das sonst nichts mit dem programmieren.
Was mach denn das || ?Ok. Ich denke ich hab einen meiner Fehler entdeckt. Die || überprüfen ob nur eins von dem Zutrifft. Wenn ich jetzt zwar kein Enter gedrückt habe, aber dafür c macht er dennoch weiter mit dem Einlesen, da ja in dem Fall bei Enter true rauskommt, wenn ich kein Enter betätige. Also ist die Abfrage totaler Quatsch, weil es nie der Fall sein kann.
SeppJ schrieb:
hexadezimal schrieb:
Tanren schrieb:
Deine while Bedingung ist falsch. Überleg dir mal genau was passiert wenn char(13) oder char(99) daherkommt.
Tip: Deine Bedingung ist immer true egal welches Zeichen kommt.Hm. So wie ich es verstehe überprüft er bei char(13) ob die Enter-Taste betätigt wurde und bei char(14) ob die c-Taste betätigt wurde.
Nein, du sollst nicht sagen, was du denkst, was es tut, sondern du sollst überlegen, was es tut!
Lassen wir mal die blödsinnigen Typumwandlungen weg, die machen sowieso nichts. Dann wird es etwas übersichtlicher:if (zeichen != 13 || zeichen != 99)In Worten: "Wenn Zeichen ungleich 13 oder wenn Zeichen ungleich 99
Nun überleg mal, in welchen der folgenden Fällen die Bedingung wahr oder falsch ist (und warum!):
1. Wenn Zeichen gleich 13 ist
2. Wenn Zeichen gleich 99 ist
3. Wenn Zeichen gleich 73 ist
4. Wenn Zeichen einen beliebigen Wert hatIn allen Fällen ist sie wahr, da, wenn zwar der erste Teil der Bedingung falsch ist durch den zweiten Teil der Bedingung der Gesamtausdruck aber wieder wahr wird, und andersrum. Stimmt diese Überlegung?
-
...
-
Gracias

Klasse Forum

-
...
-
Also könnte die Bedingung so aussehn:
do{ ... }while(zeichen != '\r');?
-
while(zeichen != '\r' && zeichen != 'c');