Frage zur while-Schleife bzw. zur Bedingung
-
Mit einer 2 klappt es genausogut.
Eine Expression ist ein Ausdruck, der sich zu einem bool auswerten lässt. Also alles, was mit den Vergleichsoperatoren zusammenhängt (=, <, >, ...) oder was sich in bool konvertieren lässt (int, char*, ...).Deine 2 ist ein int. Ein int wird ohne weiteres in einen bool konvertiert, genauso wie die 1. Der Grund, warum man trotzdem 1 nimmt, ist ein anderer: Es gibt das ungeschriebene Gesetz, keine "magic numbers" in den Quellcode zu setzen. Ausnahme sind 0 und 1.
Zum Beispiel ist es ganz schlecht, Zahlen wie 42 oder 163 als Arraygröße zu nehmen. Jeder Leser des Codes fragt sich sofort: "Warum steht da 42 und nicht 51?"
-
expression ist die "Bedingung", die gelten soll, solange die Schleife läuft. Das ist ähnlich wie mit "if".
while (1) {...}
Soll also heißen: Solange "1" gilt/gibt, die Schleife durchführen. Selbstverständlich kannst du auch
while (2) {...}
schreiben. Die Möglichkeit mit der eins hat sich nuneinmal so eingebürgert.
Alles klar?
flyingCoder.
-
Ja leuchtet ein... Aber theoretisch könnte man jede Zahl als Bedingung nehmen, und es wäre immer ne Endlosschleife?
-
@cd9000: Hätte ich nur mal etwas früher auf "absenden" gedrückt ...
-
Olliwer schrieb:
Ja leuchtet ein... Aber theoretisch könnte man jede Zahl als Bedingung nehmen, und es wäre immer ne Endlosschleife?
Ja.
Noch eine verbreitete Möglichkeit ist:for(;;) {...}
-
Achso, bei for geht das nicht mit den Zahlen oder ist es da halt nur so üblich mit (;;)
-
Olliwer schrieb:
Achso, bei for geht das nicht mit den Zahlen oder ist es da halt nur so üblich mit (;;)
Nein nein nein
. Bei "for" gibt es ja drei Anweisungen, die du jeweils mit ";" abschließt. Wenn man keine Anweisungen macht, schreibt man trotzdem ein ";". Kennst du sicherlich von
do { ... } while (...) ; /* <-- */
Kleines Beispiel:
for (i=0;;i++) { getchar(); if (i >= 10) break; } printf("Sie haben 10x auf Enter gedrueckt");
Im Prinzip auch eine Endlosschleife.
Lange Rede, kurzer Sinn. Bei for (;; ) macht man keine Anweisungen/Bedingungen. Also läuft die Schleife - auf den ersten Blick - bis zum "Sankt Nimmerleinstag".Hoffe, ich habe dich nicht verwirrt; flyingCoder.
-
@olliwer,
man kann die Bedingung noch etwas eingrenzen.
So erreichst du, daß nur bei Eingabe von 1 das Programm vortgesetzt
und ansonsten die Schleife verlassen wird.#include <stdio.h> int main() { int eingabe = 0; while(eingabe = 1) { printf("Bitte geben Sie eine Ganzzahl ein : "); scanf("%d",&eingabe); //Wenn eingabe 0 oder größer, gleich 2, dann verlasse die Schleife if((eingabe == 0) || (eingabe >= 2)) break; } printf("Sie sind raus aus der Schleife!!\n"); getch(); return 0; }
-
du hast bei deiner while bedingung = geschrieben, es muss aber == heißen, weil es ja ein vergleich ist. war warscheinlich nur ein leichsinnsfehler, kann aber einem "ungeübten auge" ziemlich probleme bereiten.
-
Die while-Bedingung checkt einfach nur ab, ob der Ausdruck in der Klammer wahr oder falsch ist (Binär 1 oder 0)
. Jeder Ausdruck ungleich 0 wird somit als wahr gedeutet. Da 1 immer wahr ist, läuft die Schleife endlos. Einzig die break-Anweisung bewirkt, dass die Schleife verlassen werden kann. Theoretisch kannst du aber jeden Wert ungleich 0 reinschreiben und es wird als wahr gewertet. Klaro?
-
Hi zoppe,
erstmal danke für das Feetback.
Probiere das Programm bitte mal mit "== im while" aus.Gruß azoikum.