<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Nach Koordinaten fragen, bis ALLE Schiffe versenkt sind!]]></title><description><![CDATA[<p>Hallo,<br />
ich, Programmieranfänger, bin gerade dabei Schiffe versenken zu programmieren.<br />
Mir wurde empfohlen &quot;goto&quot; zu vermeiden und dem bin ich auch nachgegangen indem ich do-while-Schleifen verwendet habe, aber nun habe ich ein Problem.<br />
Und zwar möchte ich, dass mein Programm so lange nach Koordinaten fragt, bis ALLE Schiffe versenkt sind.<br />
Genau das gelingt mir leider nicht. Weiß nicht, welche Bedingung ich in die Klammern nach while schreiben soll. (ZEILE 207)<br />
Hier der Code:</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;windows.h&gt;
#include &quot;ctime&quot;

using namespace std;

int breite,hoehe,i,x,y,level; //global
int feld [100][100];

void gotoxy(int x,int y)
{
	HANDLE hConsole;
	COORD cursorLoc;
	std::cout.flush();
	cursorLoc.X = x;
	cursorLoc.Y = y;
	hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hConsole, cursorLoc);
}

void allesloeschen()
{
	int i = 0;

	gotoxy(0,0);

	do
	{
	cout &lt;&lt; &quot;                                                                               \n&quot;;
	i++;
	}
	while(i&lt;13);

	gotoxy(0,0);
}

void eingabeloeschen()
{
	int i = 0;

	gotoxy(0,hoehe+3);

	do
	{
	cout &lt;&lt; &quot;                                                                               \n&quot;;
	i++;
	}
	while(i&lt;13);

	gotoxy(0,hoehe+3);
}

int _tmain(int argc, _TCHAR* argv[])
{
	SetConsoleTitleA(&quot;Schiffeversenken&quot;);
	do
{
	cout &lt;&lt; &quot;Waehlen Sie eine Schwierigkeitsstufe aus:\n&quot;;
	cout &lt;&lt; &quot;Einfach (1)\nMittel (2)\nSchwer (3)\n&quot;;
	cin &gt;&gt; level;
	allesloeschen(); // löscht (0,0) bis (80,0) und (0,12) bis (80,12) und kehrt auf (0,0) zurueck
	if(!(level == 1 || level == 2 || level == 3))
	{
		cout &lt;&lt; &quot;Ihre Eingabe ist ungueltig!\n&quot;;
		_getch();
		allesloeschen();
		cin.clear(); 
    cin.ignore(1000, '\n');
		continue; // An den Anfang der Schleife springen
	}
} 
while (!(level == 1 || level == 2 || level == 3));

	if(level==1) // breite und hoehe für Einfach
	{
		breite = 5;
		hoehe = 5;
	}
	else if(level==2) // &quot; Mittel
	{
		breite = 8;
		hoehe = 8;
	}
	else if(level==3) // &quot; Schwer
	{
		breite = 12;
		hoehe = 12;
	}
	// Feldgenerieren Anfang
		for(y=0; y&lt;breite+2; y++)
	{
			gotoxy(0,y);
			cout&lt;&lt;&quot;#&quot;;
			gotoxy(breite+1,y);
			cout&lt;&lt;&quot;#&quot;;
	}

	for(x=0; x&lt;hoehe+2; x++)
	{
			gotoxy(x,0);
			cout&lt;&lt;&quot;#&quot;;
			gotoxy(x,hoehe+1);
			cout&lt;&lt;&quot;#&quot;;
	}

			for (x=1; x&lt;breite+1; x++) 
  { 
		for (y=1; y&lt;hoehe+1; y++) 
    {
			feld[x][y] = 0;  // Spielfeld = 0 -&gt; Wasser
			gotoxy(x,y);
		  cout &lt;&lt; &quot;~&quot;; // Wasser -&gt; ~
	}
  } 
	// Feld generieren Ende
	srand((unsigned) time(NULL)); // Initialisieren des Zufallszahlengenerators
	// Schiffe generieren Anfang
	for(i=1; i&lt;6; i++)
		{
		x = rand() %breite-1 + 1;
		y = rand() %hoehe-1 + 1;

		if(x&gt;0 &amp;&amp; x&lt;breite+2 &amp;&amp; y&gt;0 &amp;&amp; y&lt;hoehe+2)
		{
			 if (feld[x][y]==1)
			 {
			i--;
			continue; // An den Anfang der Schleife springen
			 }
			feld [x][y] = 1;
			gotoxy(x,y);
			if (feld[x][y]==1)
				{
				cout &lt;&lt; &quot;S&quot;; // im Testmodus anzeigen
			}
			else
			{
				cout &lt;&lt; &quot;~&quot;;
			}
		}
		else
		{
			i--;
		}
		}
	// Schiffe generieren Ende

	int xcoord, ycoord; // Eingabe des Spielers - lokal

	gotoxy(0,hoehe+3);
	cout &lt;&lt; &quot;Das Kampffeld ist &quot; &lt;&lt; breite &lt;&lt; &quot;x&quot; &lt;&lt; hoehe &lt;&lt; &quot; gross!\n&quot; &lt;&lt; &quot;Versuchen Sie die 5 gegnerischen Schiffe&quot;
		 &lt;&lt; &quot; innerhalb des Feldes zu treffen!\n&quot;;
	// Koordinateneingabe Anfang
	do
	{
	cout &lt;&lt; &quot;Geben Sie eine x-Koordinate ein: &quot;;
	cin &gt;&gt; xcoord;
	if (cin.fail() || xcoord &gt; breite || xcoord &lt; 1) // Eingabe darf nur zwischen 1-10 
	{
		cout &lt;&lt; &quot;Eingabe liegt nicht im zulaessigen Bereich!\n&quot;;
		_getch();
		cin.clear();
		cin.ignore(INT_MAX,'\n');
		eingabeloeschen();
		continue;
	}
	cout &lt;&lt; &quot;Geben Sie eine y-Koordinate ein: &quot;;
	cin &gt;&gt; ycoord;
	// Koordinateneingabe Ende
	if (cin.fail() || ycoord &gt; hoehe || ycoord &lt; 1) // Eingabe überprüfen 
	{
		cout &lt;&lt; &quot;Eingabe liegt nicht im zulaessigen Bereich!\n&quot;;
		_getch();
		cin.clear();
		cin.ignore(INT_MAX,'\n');
		eingabeloeschen();
		continue;
	}
	// Koordinateneingabe verarbeiten Anfang
		if (feld[xcoord][ycoord] == 0)
	{
		gotoxy(xcoord, ycoord);
		cout &lt;&lt; &quot;-&quot;;
		feld[xcoord][ycoord] = 3;
		eingabeloeschen();
		cout &lt;&lt; &quot;Ziel verfehlt!&quot;;
		_getch();
		eingabeloeschen();
		continue;
	}
		else if (feld [xcoord][ycoord] == 1)
	{
		gotoxy(xcoord, ycoord);
		cout &lt;&lt; &quot;X&quot;;
		feld[xcoord][ycoord] = 2;
		eingabeloeschen();
		cout &lt;&lt; &quot;Sie haben ein gegnerisches Schiff versenkt!&quot;;
		_getch();
		eingabeloeschen();
		continue;
	}

	}
	while (feld[x][y] != 1); // oder (feld[100][100] !=1)

	cout &lt;&lt; &quot;Sie haben alle gegnerischen Schiffe versenkt!\nDruecken Sie eine beliebige Taste, um das Spiel zu beenden!&quot;;

	_getch();
	return 0;
}
</code></pre>
<p>(siehe ZEILE 207)<br />
Bei &quot;feld[x][y] != 1&quot; fragt er nach Versenken des ersten Schiffes nicht mehr weiter nach Koordinaten. Ist ja auch logisch, weil er nach dem x und y-Koodinate geht, das zuletzt &quot;verwendet&quot; wurde.</p>
<p>Bei &quot;feld[100][100] !=1&quot; fragt er auch nach Versenken des letzten Schiffes weiter nach Koordinaten, auch wenn ich zu Anfang des Programms ALLE Felder gleich 0 setze, gleiches Ergebnis.</p>
<p>Ich habe leider keine Idee mehr, wie die Bedingung sonst lauten könnte.<br />
Könnt Ihr mir da auf die Sprünge helfen?</p>
<p>lg fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322568/nach-koordinaten-fragen-bis-alle-schiffe-versenkt-sind</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 19:54:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322568.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Dec 2013 21:23:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nach Koordinaten fragen, bis ALLE Schiffe versenkt sind! on Sat, 28 Dec 2013 21:37:02 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich, Programmieranfänger, bin gerade dabei Schiffe versenken zu programmieren.<br />
Mir wurde empfohlen &quot;goto&quot; zu vermeiden und dem bin ich auch nachgegangen indem ich do-while-Schleifen verwendet habe, aber nun habe ich ein Problem.<br />
Und zwar möchte ich, dass mein Programm so lange nach Koordinaten fragt, bis ALLE Schiffe versenkt sind.<br />
Genau das gelingt mir leider nicht. Weiß nicht, welche Bedingung ich in die Klammern nach while schreiben soll. (ZEILE 207)<br />
Hier der Code:</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;windows.h&gt;
#include &quot;ctime&quot;

using namespace std;

int breite,hoehe,i,x,y,level; //global
int feld [100][100];

void gotoxy(int x,int y)
{
	HANDLE hConsole;
	COORD cursorLoc;
	std::cout.flush();
	cursorLoc.X = x;
	cursorLoc.Y = y;
	hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hConsole, cursorLoc);
}

void allesloeschen()
{
	int i = 0;

	gotoxy(0,0);

	do
	{
	cout &lt;&lt; &quot;                                                                               \n&quot;;
	i++;
	}
	while(i&lt;13);

	gotoxy(0,0);
}

void eingabeloeschen()
{
	int i = 0;

	gotoxy(0,hoehe+3);

	do
	{
	cout &lt;&lt; &quot;                                                                               \n&quot;;
	i++;
	}
	while(i&lt;13);

	gotoxy(0,hoehe+3);
}

int _tmain(int argc, _TCHAR* argv[])
{
	SetConsoleTitleA(&quot;Schiffeversenken&quot;);
	do
{
	cout &lt;&lt; &quot;Waehlen Sie eine Schwierigkeitsstufe aus:\n&quot;;
	cout &lt;&lt; &quot;Einfach (1)\nMittel (2)\nSchwer (3)\n&quot;;
	cin &gt;&gt; level;
	allesloeschen(); // löscht (0,0) bis (80,0) und (0,12) bis (80,12) und kehrt auf (0,0) zurueck
	if(!(level == 1 || level == 2 || level == 3))
	{
		cout &lt;&lt; &quot;Ihre Eingabe ist ungueltig!\n&quot;;
		_getch();
		allesloeschen();
		cin.clear(); 
    cin.ignore(1000, '\n');
		continue; // An den Anfang der Schleife springen
	}
} 
while (!(level == 1 || level == 2 || level == 3));

	if(level==1) // breite und hoehe für Einfach
	{
		breite = 5;
		hoehe = 5;
	}
	else if(level==2) // &quot; Mittel
	{
		breite = 8;
		hoehe = 8;
	}
	else if(level==3) // &quot; Schwer
	{
		breite = 12;
		hoehe = 12;
	}
	// Feldgenerieren Anfang
		for(y=0; y&lt;breite+2; y++)
	{
			gotoxy(0,y);
			cout&lt;&lt;&quot;#&quot;;
			gotoxy(breite+1,y);
			cout&lt;&lt;&quot;#&quot;;
	}

	for(x=0; x&lt;hoehe+2; x++)
	{
			gotoxy(x,0);
			cout&lt;&lt;&quot;#&quot;;
			gotoxy(x,hoehe+1);
			cout&lt;&lt;&quot;#&quot;;
	}

			for (x=1; x&lt;breite+1; x++) 
  { 
		for (y=1; y&lt;hoehe+1; y++) 
    {
			feld[x][y] = 0;  // Spielfeld = 0 -&gt; Wasser
			gotoxy(x,y);
		  cout &lt;&lt; &quot;~&quot;; // Wasser -&gt; ~
	}
  } 
	// Feld generieren Ende
	srand((unsigned) time(NULL)); // Initialisieren des Zufallszahlengenerators
	// Schiffe generieren Anfang
	for(i=1; i&lt;6; i++)
		{
		x = rand() %breite-1 + 1;
		y = rand() %hoehe-1 + 1;

		if(x&gt;0 &amp;&amp; x&lt;breite+2 &amp;&amp; y&gt;0 &amp;&amp; y&lt;hoehe+2)
		{
			 if (feld[x][y]==1)
			 {
			i--;
			continue; // An den Anfang der Schleife springen
			 }
			feld [x][y] = 1;
			gotoxy(x,y);
			if (feld[x][y]==1)
				{
				cout &lt;&lt; &quot;S&quot;; // im Testmodus anzeigen
			}
			else
			{
				cout &lt;&lt; &quot;~&quot;;
			}
		}
		else
		{
			i--;
		}
		}
	// Schiffe generieren Ende

	int xcoord, ycoord; // Eingabe des Spielers - lokal

	gotoxy(0,hoehe+3);
	cout &lt;&lt; &quot;Das Kampffeld ist &quot; &lt;&lt; breite &lt;&lt; &quot;x&quot; &lt;&lt; hoehe &lt;&lt; &quot; gross!\n&quot; &lt;&lt; &quot;Versuchen Sie die 5 gegnerischen Schiffe&quot;
		 &lt;&lt; &quot; innerhalb des Feldes zu treffen!\n&quot;;
	// Koordinateneingabe Anfang
	do
	{
	cout &lt;&lt; &quot;Geben Sie eine x-Koordinate ein: &quot;;
	cin &gt;&gt; xcoord;
	if (cin.fail() || xcoord &gt; breite || xcoord &lt; 1) // Eingabe darf nur zwischen 1-10 
	{
		cout &lt;&lt; &quot;Eingabe liegt nicht im zulaessigen Bereich!\n&quot;;
		_getch();
		cin.clear();
		cin.ignore(INT_MAX,'\n');
		eingabeloeschen();
		continue;
	}
	cout &lt;&lt; &quot;Geben Sie eine y-Koordinate ein: &quot;;
	cin &gt;&gt; ycoord;
	// Koordinateneingabe Ende
	if (cin.fail() || ycoord &gt; hoehe || ycoord &lt; 1) // Eingabe überprüfen 
	{
		cout &lt;&lt; &quot;Eingabe liegt nicht im zulaessigen Bereich!\n&quot;;
		_getch();
		cin.clear();
		cin.ignore(INT_MAX,'\n');
		eingabeloeschen();
		continue;
	}
	// Koordinateneingabe verarbeiten Anfang
		if (feld[xcoord][ycoord] == 0)
	{
		gotoxy(xcoord, ycoord);
		cout &lt;&lt; &quot;-&quot;;
		feld[xcoord][ycoord] = 3;
		eingabeloeschen();
		cout &lt;&lt; &quot;Ziel verfehlt!&quot;;
		_getch();
		eingabeloeschen();
		continue;
	}
		else if (feld [xcoord][ycoord] == 1)
	{
		gotoxy(xcoord, ycoord);
		cout &lt;&lt; &quot;X&quot;;
		feld[xcoord][ycoord] = 2;
		eingabeloeschen();
		cout &lt;&lt; &quot;Sie haben ein gegnerisches Schiff versenkt!&quot;;
		_getch();
		eingabeloeschen();
		continue;
	}

	}
	while (feld[x][y] != 1); // oder (feld[100][100] !=1)

	cout &lt;&lt; &quot;Sie haben alle gegnerischen Schiffe versenkt!\nDruecken Sie eine beliebige Taste, um das Spiel zu beenden!&quot;;

	_getch();
	return 0;
}
</code></pre>
<p>(siehe ZEILE 207)<br />
Bei &quot;feld[x][y] != 1&quot; fragt er nach Versenken des ersten Schiffes nicht mehr weiter nach Koordinaten. Ist ja auch logisch, weil er nach dem x und y-Koodinate geht, das zuletzt &quot;verwendet&quot; wurde.</p>
<p>Bei &quot;feld[100][100] !=1&quot; fragt er auch nach Versenken des letzten Schiffes weiter nach Koordinaten, auch wenn ich zu Anfang des Programms ALLE Felder gleich 0 setze, gleiches Ergebnis.</p>
<p>Ich habe leider keine Idee mehr, wie die Bedingung sonst lauten könnte.<br />
Könnt Ihr mir da auf die Sprünge helfen?</p>
<p>lg fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373956</guid><dc:creator><![CDATA[fener000]]></dc:creator><pubDate>Sat, 28 Dec 2013 21:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Koordinaten fragen, bis ALLE Schiffe versenkt sind! on Sat, 28 Dec 2013 21:38:00 GMT]]></title><description><![CDATA[<p>Dein Einrückungsstil ist schlecht, man kann nicht sehen wie die Blöcke zusammen gehören.</p>
<p>feld[100][100] existiert bei dir nicht! Also ist der Zugriff darauf auch nicht erlaubt.</p>
<p>Der Index bei Arrays fängt bei 0 an. Immer.</p>
<p>Lass einen Zähler mitlaufen. Z.B. AnzahlSchiffe.<br />
Zähl den hoch beim generieren der Schiffe und runter, wenn ein Treffer gelandet wurde.<br />
Schluß ist, wenn AnzahlSchiffe == 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373959</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Sat, 28 Dec 2013 21:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Koordinaten fragen, bis ALLE Schiffe versenkt sind! on Sat, 28 Dec 2013 21:52:30 GMT]]></title><description><![CDATA[<p>DirkB schrieb:</p>
<blockquote>
<p>Dein Einrückungsstil ist schlecht, man kann nicht sehen wie die Blöcke zusammen gehören.</p>
<p>feld[100][100] existiert bei dir nicht! Also ist der Zugriff darauf auch nicht erlaubt.</p>
<p>Der Index bei Arrays fängt bei 0 an. Immer.</p>
<p>Lass einen Zähler mitlaufen. Z.B. AnzahlSchiffe.<br />
Zähl den hoch beim generieren der Schiffe und runter, wenn ein Treffer gelandet wurde.<br />
Schluß ist, wenn AnzahlSchiffe == 0.</p>
</blockquote>
<p>Dankeschön für die schnelle Antwort!<br />
Auf die Einrückung werde ich in der Zukunft achten.<br />
Hat funktioniert. Super!</p>
<p>Gibt's sonst noch (wahrscheinlich Vieles) Suboptimales im Code?</p>
<p>lg fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373960</guid><dc:creator><![CDATA[fener000]]></dc:creator><pubDate>Sat, 28 Dec 2013 21:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Koordinaten fragen, bis ALLE Schiffe versenkt sind! on Sat, 28 Dec 2013 22:08:49 GMT]]></title><description><![CDATA[<p>fener000 schrieb:</p>
<blockquote>
<p>Gibt's sonst noch (wahrscheinlich Vieles) Suboptimales im Code?</p>
</blockquote>
<p>Ich habe mir den Code so genau nicht angesehen. Auch wegen der Einrückung.</p>
<p>Lagere mehr in Funktionen aus. Feld löschen, Schiffe gnerieren/setzen</p>
<p>Trenne Eingabe von Verarbeitung von Ausgabe.</p>
<p>Verzichte auf globale Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373963</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Sat, 28 Dec 2013 22:08:49 GMT</pubDate></item></channel></rss>