do-while Schleife durch while ersetzen
-
Hallo,
ich würd gern wissen, wie ich bei folgendem Programm die do-while - durch eine while Schleife ersetzen kann:int main() 18 { 19 char antwort = 'd'; 20 21 22 do { 23 printf("\n"); 24 printf("Menü\n"); 25 26 printf("a) Mensa Innenstadt\n"); 27 printf("b) Steinheil\n"); 28 printf("c) Thai Magie\n"); 29 printf("d) Beenden\n"); 30 printf("\n"); 31 32 printf("Bitte wählen Sie eine Aktion aus: "); 33 scanf(" %c", &antwort); 34 35 if (antwort == 'a' || antwort == 'A') { 36 printf("Es gibt Krautspaetzle. Verdauungsschlaf am Nachmittag.\n"); 37 38 } else if (antwort == 'b' || antwort == 'B') { 39 printf("Grosses Schnitzel mit Bratkartoffeln.\n"); 40 41 } else if (antwort == 'c' || antwort == 'C') { 42 printf("Menue 503. Es lebe die Mikrowelle.\n"); 43 } 44 } while (antwort != 'd' && antwort != 'D'); 45 }
Ich habe auf http://www.iks.hs-merseburg.de/~uschroet/Literatur/Java_Lit/JAVA_Insel/javainsel_02_007.htm dieser Seite eine Erklärung gefunden, kann aber mit
Anweisung while (Ausdruck) Anweisung
wenig anfangen. Sonst habe ich bei google eigentlich nichts gefunden, was wirklich brauchbar wäre.
Und ja: ich habe es auch erstmal selbst versucht.Für Tipps wäre ich sehr dankbar.
-
Eine do-while-Schleife hat die allgemeine Form
do Anweisung
while (Ausdruck)Das matched Du jetzt auf den Ausgangscode (Was ist Anweisung? Was ist Ausdruck?), und setzt das in
Anweisung
while (Ausdruck)
Anweisungein.
-
Indem du das do durch das while ersetzt und der Variable antwort erst innerhalb der Schleife den Wert 'd' zuweist:
char antwort; while(antwort != 'd' /*...*/) { antwort = 'd'; /* * */ }
EDIT: Lass dir das von SG1 mal durch den Kopf gehen..
-
SG1 schrieb:
Eine do-while-Schleife hat die allgemeine Form
do Anweisung
while (Ausdruck)Das matched Du jetzt auf den Ausgangscode (Was ist Anweisung? Was ist Ausdruck?), und setzt das in
Anweisung
while (Ausdruck)
Anweisungein.
oder
if(Ausdruck)
do
Anweisung
while(Ausdruck)
-
Ich richte mich jetzt nach der schwarz gedruckten Zeilennummerierung..
Zeile 23-43 besteht aus dem Anweisungsblock und in Zeile 44 steht bei while in der Klammer der Ausdruck.
Soll ich die Anweisung jetzt vor der while Schleife und innerhalb der while Schleife schreiben? Das ist zwar unsinnig, aber wenn ich die StrukturAnweisung
while(Ausdruck)
Anweisungwörtlich nehme, verstehe ich das so. Habs auch im compiler einfach mal eingetippt...wobei natürlich Müll rauskam....XD
-
Genau so wie du das geschrieben hast habe ich es mal versucht! Aber es geht nicht. Dann habe ich mal versucht:
while(antwort == 'a' || atnwort == 'b' ....)
hat auch nicht geklappt.
Und was SG1 geschrieben hat, habe ich mir schon lange durch den Kopf gehen lassen und kann, wei ich anfangs erwähnt habe wenig damit anfangen .
-
Ich kann als Unregistrierter nicht editieren, deshalb die 1000 posts hintereinander sorry...
Ich habe auch mal das versucht :
while (antwort == 'd' || antwort == 'D') { goto main(); }
Nach/vor der Anweisung. Aber dann tickt der aus und sagt ich hätte nach main() das Simikolon vergessen...
-
Ups! Natürlich heisst das != 'd' ...
-
Ich weiß zwar nicht was du damit bezwecken willst, aber goto ist immer der Falsche Weg.. Ganz schlechter Stil.
-
Ich hab das was Neopixel (auch Star Wars Fan ?^^) noch mal versucht und jetzt klappt das auf einmal. War wohl ne Kleinigkeit...ok danke an alle es hat sich erledigt und mein BLutdruck ist wieder normal..XD ! _
-
Die Antwort von NEO.Pixel ist schon richtig, nur daß die Variable einen definierten Wert zugewiesen bekommen sollte:
char antwort = '\0'; // damit es nicht zufällig den Wert 'd' enthält -) while(antwort != 'd' && antwort != 'D') { // ... }
Warum willst du denn die do-while-Schleife überhaupt durch eine while-Schleife ersetzen?
Du willst ja erst eine Eingabe anfragen und danach dann entsprechend dieses Wertes auswerten.
-
Jop ich hab
char antwort = 'd';
auch vor der Schleife geschrieben. Klappt alles.
-
Das ganze kann man aber nicht als for-schleife schreiben oder ? Würd mich mal interessieren.
-
Alle Schleifentypen sind austauschbar.
Bei dir wäre es dann:
for(char antwort = '\0'; antwort != 'd' && antwort != 'D'; /* no increment */ ) { // ... }
(Ich liebe es, Hausaufgaben für andere zu machen -)
-
Hast du jetzt eigentlich nicht, ich wollte es nur mal gewusst haben. Trotzdem danke. Allerdings würde ich , jetzt wo du es reingeschrieben hast, wissen , wie du auf = '\0' kommst.
-
Prof. Anfänger schrieb:
Soll ich die Anweisung jetzt vor der while Schleife und innerhalb der while Schleife schreiben?
Genau das sollst Du tun. Wenn das nicht geht, hast Du was falsch gemacht.
volkard schrieb:
SG1 schrieb:
Eine do-while-Schleife hat die allgemeine Form
do Anweisung
while (Ausdruck)Das matched Du jetzt auf den Ausgangscode (Was ist Anweisung? Was ist Ausdruck?), und setzt das in
Anweisung
while (Ausdruck)
Anweisungein.
oder
if(Ausdruck)
do
Anweisung
while(Ausdruck)Falsche Richtung.
-
Ich denke, da muss man sich erst einmal mit den unterschiedlichen Schleifen-Typen wie ´do while´ oder ´while´ auseinandersetzen und diese verstehen, wo sie den Druchlauf abbrechen. Gehört zum Rüstzeug eines C-Programmierers und ist in jedem ordentlichen Buch zu C oder C++ hinreichend beschrieben!