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.


Log in to reply