Anfänger : Logisches Oder in While Schleifen
-
Hallo,
Ich würde gerne 2 verschiedene Bedingungen in einer While Schleife auswerten und diese solange laufen lassen bis einer der beiden Bedingungen erfüllt ist.
Ich habe schon versucht, aber die Schleife wurde nur nach Erfüllung der ersten Bedingung korrekt beendet, wenn die zweite Bedingung erfüllt wurde lief die Schleife trotzdem weiter bis auch die erste erfüllt war...
Das fand ich nicht sehr nett von der Schleife und wollte/will eine zweite Schleife anlegen, aber ich bin mir eigentlich sicher, dass dadurch nur noch mehr Probleme für mich entstehen würden...:-)
Also hier kurz das Schema an das ich gedacht hatte :
while ( a<1 || b<1 )
{
if a==(<1) cout << " a ist kleiner als 1 ";
if b==(<1) cout << " b ist kleiner als 1 ";
}Ich hatte zusätzlich 2 ( sehr ) einfache Funktionen in der Schleife die solange ausgefürt werden sollten bis halt eine der beiden Bedingungen erfüllt wurde. Und je nachdem welche erfüllt wurde, sollte der entsprechende Text ausgegeben werden.
So ich hoffe mal ich hab keine weiteren Syntaxfehler eingebaut und das Schema ist klar...
Kann mir irgendjemand Bitte sagen was ich falsch gemacht habe ( oder welchen Denkfehler )
Vielen Dank im Voraus
-
Nabend,
also der Schleifenkopf muss genauso ausschauen, wie du ihn geschrieben hast:
while(a < 1 || b < 1) { //tue irgendwas }Aber ohne deinen Code zu sehen, koennen wir dir hier nicht sagen, was du falsch
gemachst hast.mfg
v R
-
Hallo
Hallo
Ich würde gerne 2 verschiedene Bedingungen in einer While Schleife auswerten und diese solange laufen lassen bis einer der beiden Bedingungen erfüllt ist.
dann muss die schleife etwa so aussehen :
while(!(bedingung1() || bedingung2())){ //... }oder so, ist das gleiche:
while(!bedingung1() && !bedingung2()){ //... }
-
Vielen Dank erst mal, ich werde das dieses Wochenende noch mal ausprobieren und über eventuellen Erfolg berichten... oder dann den Quellcode reinsetzen....
Also Danke erstmal

-
phw schrieb:
while(!(bedingung1() || bedingung2())){ //... }oder so, ist das gleiche:
while(!bedingung1() && !bedingung2()){ //... }Ist durchaus nicht das gleiche. Schau dir mal die Wahrheitstabellen für die beiden Ausdrücke an:
bed1 bed2 (!bed1 || bed2) (!bed1 && !bed2) true true true false //UNTERSCHIED false true true false //UNTERSCHIED true false false false false false true true
-
@ pumuckl
deine Wahrheitstabelle ist zwar richtig aber sie entspricht nicht dem obigen code.
Die dritte spalte müsste ! ( bedingung1() || bedingung2() ) sein.
Dann sind die beiden Ausdrücke wieder gleich.
Kurt
-
sry, klammer übersehn *schäm*
-
So, Sorry ich kriegs immer noch nicht hin...
Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife....

hier also der Code :
#include <iostream> #include <string> #include <cstdio> #include <string> using namespace std; int ATK(int M_DEF, int P_ATK) { int DAM=(M_DEF-P_ATK); return DAM; } int C_ATK(int P_DEF, int M_ATK) { int C_DAM=(P_DEF-M_ATK); return C_DAM; } int main() { string P_Name="Ruby"; int P_LVL=1; int P_EXP=0; int P_HP=100; int P_DEF=5; int P_ATK=15; int M_HP=50; int M_ATK=10; int M_DEF=5; cout << "Gegner 1 " << endl; cout << P_Name << " VS " << " Gegner 1 " << endl; /* int M_DAM(M_DEF-P_ATK); cout << " Der ausgeteilte Schaden betr\204gt : " << (M_DAM*-1) << endl; int P_DAM(P_DEF-M_ATK); cout << " Der erhaltene Schaden betr\204gt : " << (P_DAM*-1) << endl; */ cout << " Dein Gegner hat : " << M_HP << " Lebenspunkte. " << endl; cout << " Du hast : " << P_HP << " Lebenspunkte. " << endl; cout << " Du greifst an " << endl; while ( P_HP>=1 || M_HP>=1 ) { ATK(M_DEF,P_ATK); cout << "Ausgeteilter Schaden : " << ATK(M_DEF,P_ATK)*(-1) << endl; M_HP+=ATK(M_DEF,P_ATK); cout << " Neue Monster HP = " << M_HP << endl; if ( M_HP<=0 ) { cout << " Der Gegner ist Tod " << endl; } else {cout << " Los weiter !!! " << endl; } C_ATK(P_DEF,M_ATK); cout << "Erhaltener Schaden : " << C_ATK(P_DEF,M_ATK)*(-1) << endl; P_HP+=C_ATK(P_DEF,M_ATK); cout << " Deine neuen Trefferpunkte : " << P_HP << endl; if ( P_HP<=0 ) { cout << " Du bist leider gestorben... " << endl; } else { cout << " Du lebst noch, gib nicht auf ! " << endl; } getchar(); } fflush(stdin); getchar(); return 0; }Irgendwas überseh ich hier..
.. oder ist der Ansatz komplett falsch ?Bitte gebt mir einen Tip...
-
Whitedragon276 schrieb:
Irgendwie bricht die Schleife bei mir immer erst ab, wenn beide Bedingungen erfüllt sind... und wenn ich das ! versuchte wurde es eine Endlosschleife....

Es würde würde wahrscheinlich enorm helfen, wenn du dir darüber klar würdest, dass eine while-Schleife nicht abbricht, wenn eine Bedingung erfüllt ist, sondern läuft, solange eine Bedingung erfüllt ist (sonst würde sie until heißen).
while ( P_HP>=1 || M_HP>=1 )Das wird dann wohl ein Und sein (&&) und kein Oder ...
-
OK... habs zwar noch nicht ganz kapiert... aber das funkioniert tatsächlich mit dem Und statt Oder...
zum Verständnis :
Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?
Und sie läuft nicht weiter wenn eine der beiden Bedingungen erfüllt ist ?
Aber sie läuft weiter wenn Bedingung 1 oder Bedingung 2 erfüllt wurde ?

Das wird wohl noch ne Zeit dauern bis ich das "Logisch" anwenden kann....
Aber erst mal Dank an alle die mir hier geholfen haben...:-)
-
Whitedragon276 schrieb:
Also Während/solange beide Bedingungen nicht erfüllt sind läuft die Schleife ?
Wie kommst du immer auf das "nicht"?
-
Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?
OK.. ich glaub ich habs... Die Schleife läuft bis die Bedingungen erfüllt sind ? **Hoff**
Danke
-
Es heisst while -> läuft solange die Bedingung erfüllt ist == läuft bis die Bedingung nicht mehr erfüllt ist.
Kurt
-
Whitedragon276 schrieb:
Naja... Die Schleife läuft doch solage P_HP & M_HP >=1 sind, und wird nicht mehr wiederholt wenn eine der beiden Bedingungen ... ?
Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.
Vielleicht benutzt du das Wort "erfüllt" auch nur komisch

-
...aber diesen Quellcode würde man doch schneller und unkomplizierter ohne die ganzen Funktionsaufrufe schreiben können, oder ?
C++4eVer
-
@Bashar >>
Sie läuft, solange P_HP >= 1 UND M_HP >= 1. Das heißt, sie bricht ab, sobald eine der Bedingungen nicht mehr erfüllt ist.
Das war genau der Satz, der den Groschen zum fallen brachte, Danke !!!