<?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[Schleife mit ESC abbrechen]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Wie schon die Topicüberschrift verrät versuche ich eine Schleife mit der ESC-Taste abzubrechen.<br />
Zur Schleifenfunktion: Die Schleife sollte bis man die ESC-Taste drückt, Zahlen in ein Array einlesen.<br />
Klappt auch alles bis auf den Abbruch mit ESC.<br />
Wäre dankbar für jeden Ansatz!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
using namespace std;

int main(){
	int array[50];
	char pressedkey;

	cout &lt;&lt; &quot;Mit ENTER Eingabe bestaetigen und mit ESC die Eingabe abbrechen.&quot; &lt;&lt; endl;

	for (int i = 0; i &lt; 50; ++i)
	{
		cin &gt;&gt; array[i];
		if (kbhit())
		{
			pressedkey = getch();
			if (pressedkey == 27)
			{
				break;
			}
		}
	}

	system (&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/298120/schleife-mit-esc-abbrechen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 23:33:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298120.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Jan 2012 19:15:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 19:15:31 GMT]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Wie schon die Topicüberschrift verrät versuche ich eine Schleife mit der ESC-Taste abzubrechen.<br />
Zur Schleifenfunktion: Die Schleife sollte bis man die ESC-Taste drückt, Zahlen in ein Array einlesen.<br />
Klappt auch alles bis auf den Abbruch mit ESC.<br />
Wäre dankbar für jeden Ansatz!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
using namespace std;

int main(){
	int array[50];
	char pressedkey;

	cout &lt;&lt; &quot;Mit ENTER Eingabe bestaetigen und mit ESC die Eingabe abbrechen.&quot; &lt;&lt; endl;

	for (int i = 0; i &lt; 50; ++i)
	{
		cin &gt;&gt; array[i];
		if (kbhit())
		{
			pressedkey = getch();
			if (pressedkey == 27)
			{
				break;
			}
		}
	}

	system (&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2167764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167764</guid><dc:creator><![CDATA[user369]]></dc:creator><pubDate>Fri, 13 Jan 2012 19:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 19:54:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cstdio&gt;

using namespace std;

const char* ASCII[] =  { &quot;NUL&quot;, &quot;SOH&quot;, &quot;STX&quot;, &quot;ETX&quot;, &quot;EOT&quot;, &quot;ENQ&quot;, &quot;ACK&quot;, &quot;BEL&quot;, &quot;BS&quot;,  &quot;TAB&quot;, &quot;LF&quot;,  &quot;VT&quot;,  &quot;FF&quot;,  &quot;CR&quot;,  &quot;SO&quot;,  &quot;SI&quot;,
                         &quot;DLE&quot;, &quot;DC1&quot;, &quot;DC2&quot;, &quot;DC3&quot;, &quot;DC4&quot;, &quot;NAK&quot;, &quot;SYN&quot;, &quot;ETB&quot;, &quot;CAN&quot;, &quot;EM&quot;,  &quot;SUB&quot;, &quot;ESC&quot;, &quot;FS&quot;,  &quot;GS&quot;,  &quot;RS&quot;,  &quot;US&quot;,
                         &quot;SPC&quot;, &quot;!&quot;,   &quot;\&quot;&quot;,  &quot;#&quot;,   &quot;$&quot;,   &quot;%&quot;,   &quot;&amp;&quot;,   &quot;'&quot;,   &quot;(&quot;,   &quot;)&quot;,   &quot;*&quot;,   &quot;+&quot;,   &quot;,&quot;,   &quot;-&quot;,   &quot;.&quot;,   &quot;/&quot;,
                         &quot;0&quot;,   &quot;1&quot;,   &quot;2&quot;,   &quot;3&quot;,   &quot;4&quot;,   &quot;5&quot;,   &quot;6&quot;,   &quot;7&quot;,   &quot;8&quot;,   &quot;9&quot;,   &quot;:&quot;,   &quot;;&quot;,   &quot;&lt;&quot;,   &quot;=&quot;,   &quot;&gt;&quot;,   &quot;?&quot;,
                         &quot;@&quot;,   &quot;A&quot;,   &quot;B&quot;,   &quot;C&quot;,   &quot;D&quot;,   &quot;E&quot;,   &quot;F&quot;,   &quot;G&quot;,   &quot;H&quot;,   &quot;I&quot;,   &quot;J&quot;,   &quot;K&quot;,   &quot;L&quot;,   &quot;M&quot;,   &quot;N&quot;,   &quot;O&quot;,
                         &quot;P&quot;,   &quot;Q&quot;,   &quot;R&quot;,   &quot;S&quot;,   &quot;T&quot;,   &quot;U&quot;,   &quot;V&quot;,   &quot;W&quot;,   &quot;X&quot;,   &quot;Y&quot;,   &quot;Z&quot;,   &quot;[&quot;,   &quot;\\&quot;,  &quot;]&quot;,   &quot;^&quot;,   &quot;_&quot;,
                         &quot;`&quot;,   &quot;a&quot;,   &quot;b&quot;,   &quot;c&quot;,   &quot;d&quot;,   &quot;e&quot;,   &quot;f&quot;,   &quot;g&quot;,   &quot;h&quot;,   &quot;i&quot;,   &quot;j&quot;,   &quot;k&quot;,   &quot;l&quot;,   &quot;m&quot;,   &quot;n&quot;,   &quot;o&quot;,
                         &quot;p&quot;,   &quot;q&quot;,   &quot;r&quot;,   &quot;s&quot;,   &quot;t&quot;,   &quot;u&quot;,   &quot;v&quot;,   &quot;w&quot;,   &quot;x&quot;,   &quot;y&quot;,   &quot;z&quot;,   &quot;{&quot;,   &quot;|&quot;,   &quot;}&quot;,   &quot;~&quot;,   &quot;DEL&quot;};

int main()
{
    const static char ESC   = 0x1B;
    char c = 0;
    do
    {
        c = getchar();
        printf(&quot;key pressed = %s\n&quot;, ASCII[(size_t)c]);
    } while(c != ESC);
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2167775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167775</guid><dc:creator><![CDATA[spermium]]></dc:creator><pubDate>Fri, 13 Jan 2012 19:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 20:34:04 GMT]]></title><description><![CDATA[<p>Ich habe es jetzt anders gelöst.<br />
Mein Gedanke war, dass die Schleife ja immer bis zur Eingabe läuft und da wartet. Sie hat also die Prüfung ob ESC gedrückt wurde übersprungen da man kurz zuvor die Entertaste bei der Eingabe betätigt hatte und anscheinend das in der IF-Anweisung ausgewertet.<br />
Also habe ich da eine Sleep-Funktion eingebaut sodass das Programm vor der IF-Anweisung wartet.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;Windows.h&gt;
using namespace std;

int main(){
	int grundmenge = 0;
	int array[50];
	char pressedkey;

	cout &lt;&lt; &quot;Mit ENTER Eingabe bestaetigen und mit ESC die Eingabe abbrechen.&quot; &lt;&lt; endl;

	for (int i = 0; i &lt; 50; ++i)
	{
		cin &gt;&gt; array[i];
		++grundmenge;

		while (!kbhit())             //Warteposition
			Sleep(10);

		if (kbhit())
		{
			pressedkey = getch();
			if (pressedkey == 27)
			{
				break;
			}
		}
	}

	for (int n = 0; n &lt; grundmenge; ++n) //Ausgabe des Feldes
	{
		cout &lt;&lt; array[n] &lt;&lt; &quot; &quot; &lt;&lt; endl;
	}

	system (&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2167786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167786</guid><dc:creator><![CDATA[user369]]></dc:creator><pubDate>Fri, 13 Jan 2012 20:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 20:42:11 GMT]]></title><description><![CDATA[<p>Also ich hab zwar keine Ahnung was dein eigendliches Problem ist - artikulier dich doch mal präzise, aber das hört sich so oder so einfach nur haarsträubend an:</p>
<blockquote>
<p>Also habe ich da eine Sleep-Funktion eingebaut sodass das Programm vor der IF-Anweisung wartet.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2167790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167790</guid><dc:creator><![CDATA[gast0815]]></dc:creator><pubDate>Fri, 13 Jan 2012 20:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 20:44:19 GMT]]></title><description><![CDATA[<p>gast0815 schrieb:</p>
<blockquote>
<p>Also ich hab zwar keine Ahnung was dein eigendliches Problem ist - artikulier dich doch mal präzise, aber das hört sich so oder so einfach nur haarsträubend an:</p>
<blockquote>
<p>Also habe ich da eine Sleep-Funktion eingebaut sodass das Programm vor der IF-Anweisung wartet.</p>
</blockquote>
</blockquote>
<p>Schaut so aus dass er nicht Enter drücken will und trotzdem mit ESC abbrechen... keine Ahnung ob das mit standard c++ überhaupt geht ... man kann sich das Leben halt unnötig schwer machen XD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167791</guid><dc:creator><![CDATA[spermium]]></dc:creator><pubDate>Fri, 13 Jan 2012 20:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 20:54:58 GMT]]></title><description><![CDATA[<p>Das Ziel war, das ich die Schleife mit ESC abbrechen wollte, noch bevor das Array voll ist. Problem war das es auf die ESC-Taste nicht reagiert hat weil die IF-Anweisung die überprüfen sollte ob die ESC gedrückt wurde, die Eingabetaste beim Eingeben der Werte in das Array überprüft hat.</p>
<p>Das habe ich wiederrum mit der Sleepfunktion behoben sodass die Schleife vor der IF-Anweisung wartet.</p>
<p>und wers einfacher kann soll es hier posten ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167795</guid><dc:creator><![CDATA[user369]]></dc:creator><pubDate>Fri, 13 Jan 2012 20:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 21:39:46 GMT]]></title><description><![CDATA[<p>user369 schrieb:</p>
<blockquote>
<p>und wers einfacher kann soll es hier posten ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Darf ich die Anforderung etwas ändern? Escape ist doof. Besonders wenn dadurch das Programm unterbrochen werden soll, weil wir dann das gelobte Land des Sprachstandards verlassen. Was aber ganz einfach ist, ist festzustellen, ob die letzte Eingabe funktioniert hat. Wenn eine Zahl eingegeben werden sollte und es kam ein Buchstabe oder das Dateiende oder meinetwegen auch ein Escape-Zeichen, dann können wir ganz einfach abbrechen. Aber speziell nur auf Escape zu reagieren ist kompliziert, denn dann müssen wir erst einmal alles einlesen und nach Escapes suchen und wenn keine drin sind, müssen wir die Zahlen raussuchen und wenn Buchstaben drin sind, müssen wir auch drauf reagieren. Du merkst: Unnötig kompliziert, wenn man es auch wie bei mir in Zeile 9 machen kann und damit mit einer Zeile alle möglichen Ausnahmen abdeckt.</p>
<p>Feste Arrays sind auch doof, besonders wenn wir vorher nicht wissen, wieviel kommt. Da müssen wir uns hinterher immer merken, wieviel überhaupt gekommen ist und während der Eingabe müssen wir aufpassen, dass es nicht zu viele Werte sind und kopierbar sind Arrays auch nicht so einfach. Lauter Fehlerquellen, die wir vollständig vermeiden, indem wir einfach eine Datenstruktur nehmen, die mitwächst und die sich selber merkt, wie groß sie ist und die man so behandeln kann wie all die simplen Datentypen und die sich vollautomatisch selbst verwaltet, so dass wir gar nichts mehr tun müssen.</p>
<p>Und alles zusammen und mit kleiner Demo zur Ausgabe (nach C++98, in C++11 geht das auch noch eine Spur eleganter) sieht dann so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
  std::cout &lt;&lt; &quot;Zahlen eingeben. Abbruch durch Eingabe einer Nicht-Zahl.\n&quot;;
  std::vector&lt;int&gt; zahlen;
  int zahl;
  while (std::cin &gt;&gt; zahl)
    zahlen.push_back(zahl);
  std::cout &lt;&lt; &quot;Eingabe war keine Zahl. Bisher eingegebene Zahlen: &quot;;
  for(int i; i &lt; zahlen.size(); ++i)
    std::cout &lt;&lt; zahlen[i] &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
}
</code></pre>
<p>Das Programm kann viel mehr als deines (es gibt nachher alle Zahlen aus), ist dabei trotzdem kürzer, gleichzeitig robust gegen alle Fehlerquellen (deines nicht) und auch noch besser erweiterbar und auf jede Plattform mit standardkonformem C++ portabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167803</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jan 2012 21:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 22:31:18 GMT]]></title><description><![CDATA[<p>Cool, sieht gut aus.<br />
Wenn du mir jetzt noch sagst was das</p>
<pre><code class="language-cpp">zahlen.push_back(zahl)
</code></pre>
<p>macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167820</guid><dc:creator><![CDATA[user369]]></dc:creator><pubDate>Fri, 13 Jan 2012 22:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 22:34:57 GMT]]></title><description><![CDATA[<p>Es hängt den Wert <code>zahl</code> hinten an das dynamische Array <code>zahlen</code> an. Dieses wird falls nötig dafür vergrößert.</p>
<p>Falls dir vector gar nichts sagt, lies erst einmal weiter in deinem Lehrbuch, wo das hoffentlich sehr bald drankommt. Ist sicherlich nützlicher als gleich zu Anfang Details über Arrays zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167823</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jan 2012 22:34:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 22:46:41 GMT]]></title><description><![CDATA[<p>Ahh ok.<br />
Naa, ich arbeite nach einem Skript und meistens google ich den Rest.<br />
Das Skript verliert aber kein Wort über Vektoren...</p>
<p>Kannst du vielleicht ein Buch empfehlen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167826</guid><dc:creator><![CDATA[user369]]></dc:creator><pubDate>Fri, 13 Jan 2012 22:46:41 GMT</pubDate></item><item><title><![CDATA[Reply to Schleife mit ESC abbrechen on Fri, 13 Jan 2012 23:10:28 GMT]]></title><description><![CDATA[<p>user369 schrieb:</p>
<blockquote>
<p>Kannst du vielleicht ein Buch empfehlen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/251551" rel="nofollow">http://www.c-plusplus.net/forum/251551</a></p>
<p>Und lies das Script nicht weiter. Wenn da nichts über Vectoren drinsteht, dass ist wie ein Englischbuch ohne Verben. Leider gibt es viel zu viele schlechte C++-Lehrwerke, deren Autoren von C (oder noch älteren Sprachen) kommen und denken, wenn sie printf mit cout ersetzen wäre es C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167833</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Jan 2012 23:10:28 GMT</pubDate></item></channel></rss>