aufhänger bei do/while-schleife
-
aha, und wie könnte man das problem umgehen?
denn ich dachte immer dass die bedingung in die klammer nach dem while kommt, oder irr ich mich da?
hier das programm:#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;int main(int argc, char *argv[])
{
srand( (unsigned)time(NULL) );
int feld1[3][2]=
{{1,1},
{1,1},
{1,1}};
int feld2[3][2]=
{{0,0},
{0,0},
{0,0}};int x; int y;
for (x=0; x<3; x=x+1)
{for (y=0; y<2; y=y+1)
{printf ("%d ", feld1[x][y]);}
printf ("\n");}
printf("\n");for (x=0; x<3; x=x+1)
{for (y=0; y<2; y=y+1)
{printf ("%d ", feld2[x][y]);}
printf ("\n");}
printf("\n");int c; int d;
int a = (rand()%3);
int b = (rand()%2);
feld1[a][b]=0;
feld2[a][b]=1;do{int c = rand()%3;
int d = rand()%2;} while (feld1[c][d]=0);
feld1[c][d]=0;
feld2[c][d]=1;for (x=0; x<3; x=x+1)
{for (y=0; y<2; y=y+1)
{printf ("%d ", feld1[x][y]);}
printf ("\n");}
printf("\n");for (x=0; x<3; x=x+1)
{for (y=0; y<2; y=y+1)
{printf ("%d ", feld2[x][y]);}
printf ("\n");}
printf("\n");system("PAUSE");
return EXIT_SUCCESS;
}ich habe es auch so versucht:
int w=1;
while(w=1)
{int c = rand()%3;
int d = rand()%2;
if (feld1[c][d]=1)
{w=0;}
else
{w=1;}}
feld1[c][d]=0;
feld2[c][d]=1;kann das jemand verbessern oder mir eine andere lösung zeigen?
-
shapeless schrieb:
while (feld[c][d]=0);ist eine endlosschleife, denn es ist eine zuweisung und kein vergleich.
Trotzdem keine Endlosschleife, da der Ausdruck nicht wahr ist.
@ dom90: Benutzt die [cpp]-Tags. So will niemand deinen Code lesen.
-
Tim schrieb:
shapeless schrieb:
while (feld[c][d]=0);ist eine endlosschleife, denn es ist eine zuweisung und kein vergleich.
Trotzdem keine Endlosschleife, da der Ausdruck nicht wahr ist.
@ dom90: Benutzt die [cpp]-Tags. So will niemand deinen Code lesen.
Bin ich nun total fern jeder c++ Zeit die ich mal hatte, oder ist eine
Zuweisung nicht definitiv wahr ?Warum sollte denn der Ausdruck nicht wahr sein ?
( wenn auch dieshier 2 endlosschleifen verursacht ):[cpp]#include <iostream>
int main(){
int a=0;
while(a=2){
std::cout<<"smth\n";
break; // weil endlos
}int foo [10][10];
while(foo[0][0]=1){
std::cout<<"smth else \n";
}
return true;}[/cpp]
Oder war deine Aussage schon auf sein Beispiel bezogen ( welches ich noch
nicht ganz gelesen hab ( eben wegen der fehlenden tags )PS: meine cpp tags gehen irgendwie nicht.
-
shapeless schrieb:
Bin ich nun total fern jeder c++ Zeit die ich mal hatte, oder ist eine
Zuweisung nicht definitiv wahr ?Nein, eine zuweisung hat den selben warheitswert wie der zugewiesene wert.
/edit: Hm. Oder wie die lvalue nach der zuweisung? Bei dem Array ist das ein unterschied.
-
while (a=1) // immer true while (a=0) // immer falseEs zählt letzlich der Rückgabewert der Zuweisung und die ist im ersten Fall true (=> 1) und im zweiten Fall false (=> 0).
-
Oha stimmt. so wars.
wie gesagt zu lange her.
dann hätt ich wenigstens mal mit 0 und nicht mit 2 testen sollen.
however danke für die Erinnerungshilfe! ( an euch 2 ( bzw 3 ) )Dann zum OP:
Es ist zwar keine Endlosschleife, aber dennoch ist der Vergleich in
der Bedingung der Whileschleife falsch. ( semantisch nicht syntaktisch ).
Ich gehe davon aus, dass du == und nicht = meinst, oder ?
-
vergleiche mit ==
-
Aja ist ja alles schön und gut,
aber mein problem ist auch dass ich erst vor 3 tagen mit c angefangen habe.
Ich habe jetzt in der bedingungung dass = mit dem == ausgetauscht, was allerdings nichts zu nützen scheint.Kann es vielleicht sein, dass es daran liegt dass, wenn die schleife wider durchlaufen wird trotzdem keine neuen random -zahlen ausgewürfelt werden und er deswegen immer wider das selbe feld prüft?
Ich bin sehr dankbar wenn mir einer einfach klare anweisungen gibt, weil mein c-wissen noch sehr beschränkt ist.
-
poste mal deinen code schön formatiert
-
Hier etz mal das ganze progrämmchen in schöner form:
#include <cstdlib> #include <iostream> #include <ctime> using namespace std; int main(int argc, char *argv[]) { srand( (unsigned)time(NULL) ); int feld1[3][2]= {{1,1}, {1,1}, {1,1}}; int feld2[3][2]= {{0,0}, {0,0}, {0,0}}; int c; int d; int a = (rand()%3); int b = (rand()%2); feld1[a][b]=0; feld2[a][b]=1; do {int c = rand()%3; int d = rand()%2;} while (feld1[c][d]==0); feld1[c][d]=0; feld2[c][d]=1; system("PAUSE"); return EXIT_SUCCESS; }Das Problem ist doch eher trivial, oder?( trotzdem zu hoch für mich)
Kann mir irgendjemand den fehler zeigen?