schleife wird nicht verlassen (Anfänger)
-
Ich will als Übung ein kleines Schiffe versenken schreiben, dazu wird ein 2D char Array als Spielfeld und ein 2D int Array für die Positionen der Schiffe verwendet.
Zuerst werden beide Arrays "geleert" (bzw einfach ein zeichen reingeschrieben, das ich als leer interpretieren werde, beim char-Array das x, beim int-array die 0).
Nun soll 7 mal an einer zufälligen Stelle ein Schiff gesetzt werden. Aber genau hier wird die Schleife nicht verlassen (habe ich mit einfügen von Ausgaben getestet). Hier der Quellcode:#include <iostream> #include<cstdlib> #include <time.h> #include <windows.h> using namespace std; int main(){ char spielfeld[6][6]; int schiffe[6][6]; int x, y, xin, yin; for (x=0; x<6; x++){ //Spielfeld wird geleert for (y=0; y<6; y++){ spielfeld[x][y]='x'; schiffe[x][y]=0; } } int z1, z2; for(int i=0; i<7; i++){ //es sollen 7 Schiffe (je 1 Feld) erzeugt werden srand(time(NULL)); z1=int(rand()%6); z2=int(rand()%6); // 2 Zufallszahlen als Koordinaten cout<<z1<<" "<<z2<<" "<<"cv"<<schiffe[z1][z2]<<endl; //Testausgabe while (schiffe[z1][z2]=1) //Diese Schleife wird nei wieder verlassen. Warum? { srand(time(NULL)); z1=int(rand()%6); z2=int(rand()%6); cout<<z1<<" "<<z2<<" "<<schiffe[z1][z2]<<endl; Sleep(1000); } cout<<"v"<<endl; //test ob die Schleife verlassen wurde (leider nicht :-() schiffe[z1][z2]=1; //Die Position der Zufallsstelle wird gespeichert } cout<<" 123456"<<endl; for (y=0; y<6; y++){ //Spielfeld wird gezeigt cout<<char(y+'A'); for (x=0; x<6; x++){ cout<<spielfeld[x][y]; } cout<<endl; } cout<<"Bitte geben sie die Koordinaten ein, auf denen sie ein Schiff vermuten (z.B.: 3B)"<<endl; cin>>xin>>yin; xin -='1'; yin -='A'; cout<<xin<<" "<<yin; getchar(); }
Vielen Dank schonmal
-
Was ist der Unterschied zwischen = und == ?
-
-.- Das wars, ich hab mit = verglichen, aber es muss natürlich == sein
-
Tipp. Wenn du die Konstante, gegen die du prüfst, auf die rechte Seite schreibst, dann meckert bei solch versehentlichen Zuweisungen der Compiler.
Also:
while (schiffe[z1][z2]==1)
umschreiben in
while (1==schiffe[z1][z2])
-
Oder man lagert die Ausgabe in eine eigene Funktion/Methode aus und übergibt die Parameter als const Referenz. Ist bei rohen C-Arrays natürlich etwas umständlich, da die Längeninformationen verloren gehen, vielleicht sollte man sich Gedanken über eine Array2D Klasse machen.