<?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[Programmabsturz durch Fehleingabe verhindern]]></title><description><![CDATA[<p>Hey Leute,<br />
ich hab mal wieder ne Frage!</p>
<p>Also wenn ich eine int variable einlesen lass und der Benutzer zb.: ein buchstabe eingibt gibt es ja sowas wie einen Programmabsturz!<br />
Wie kann ich das verhindern..<br />
ich hab mir das so gedacht!</p>
<pre><code class="language-cpp">while(true)
{   
	cout &lt;&lt;&quot;Geben Sie die Stufe an: &quot;;
	cin &gt;&gt; stufe;

	if(!(cin &gt;&gt; stufe))
	{	cout&lt;&lt;endl;
	cerr &lt;&lt;&quot;Fehler bei Eingabe&quot;&lt;&lt;endl;
	getch();
	}
	if(cin.bad())
	{ cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	 getch();
	 }
	if(cin.fail())
	{cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	getch();
	}

	else 
	break;

	system(&quot;cls&quot;);

}
</code></pre>
<p>allerding wenn ich das so Mache bekomme ich die Fehlermeldungen angezeigt dann aber er lässt mich dann nicht nocheinmal erneut die zahl eingeben er zeigt mir dann nur immerwieder die Fehlermeldungen an!<br />
was mache ich falsch?<br />
oder was kann ich anders machen!</p>
<p>mfg</p>
<p>danke schon mal! <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/topic/261301/programmabsturz-durch-fehleingabe-verhindern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 13:27:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261301.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Feb 2010 13:23:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:23:24 GMT]]></title><description><![CDATA[<p>Hey Leute,<br />
ich hab mal wieder ne Frage!</p>
<p>Also wenn ich eine int variable einlesen lass und der Benutzer zb.: ein buchstabe eingibt gibt es ja sowas wie einen Programmabsturz!<br />
Wie kann ich das verhindern..<br />
ich hab mir das so gedacht!</p>
<pre><code class="language-cpp">while(true)
{   
	cout &lt;&lt;&quot;Geben Sie die Stufe an: &quot;;
	cin &gt;&gt; stufe;

	if(!(cin &gt;&gt; stufe))
	{	cout&lt;&lt;endl;
	cerr &lt;&lt;&quot;Fehler bei Eingabe&quot;&lt;&lt;endl;
	getch();
	}
	if(cin.bad())
	{ cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	 getch();
	 }
	if(cin.fail())
	{cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	getch();
	}

	else 
	break;

	system(&quot;cls&quot;);

}
</code></pre>
<p>allerding wenn ich das so Mache bekomme ich die Fehlermeldungen angezeigt dann aber er lässt mich dann nicht nocheinmal erneut die zahl eingeben er zeigt mir dann nur immerwieder die Fehlermeldungen an!<br />
was mache ich falsch?<br />
oder was kann ich anders machen!</p>
<p>mfg</p>
<p>danke schon mal! <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/1856549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856549</guid><dc:creator><![CDATA[Spl1nt3r]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:34:32 GMT]]></title><description><![CDATA[<p>Fehlerflags zurücksetzen:</p>
<pre><code class="language-cpp">if(!cin.good())
{
   //Fehler beheben
   cin.clear();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856556</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:28:20 GMT]]></title><description><![CDATA[<p>Wenn das failbit eines Streams erstmal gesetzt wurde, muss man es erst wieder mit clear() löschen, bevor man wieder aus dem Stream lesen kann. Doch Vorsicht: Die Zeichen die zuvor für den Fehler gesorgt haben, sind dann immer noch im Stream (da sie ja nicht ausgelesen wurden), man sollte daher danach noch ein paar Zeichen aus dem Stream mittels ignore() überspringen (je nach Anwendungsfall eines oder alle verbleibenden Zeichen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856557</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:37:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while(true)
{   
	cout &lt;&lt;&quot;Geben Sie die Stufe an: &quot;;
	cin &gt;&gt; stufe;

	if(!(cin &gt;&gt; stufe))
	{	cout&lt;&lt;endl;
	cerr &lt;&lt;&quot;Fehler bei Eingabe&quot;&lt;&lt;endl;
	cin.clear();
	getch();
	}
	if(cin.bad())
	{ cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	cin.clear();
	 getch();
	 }
	if(cin.fail())
	{cerr&lt;&lt;&quot;Fehler bei Eingabe!&quot;&lt;&lt;endl;
	cin.clear();
	getch();
	}

	else 
	break;

	system(&quot;cls&quot;);

}
</code></pre>
<p>okay so siehts jetzt aus allerdings lässt er mich immernochnicht wieder eingeben! stattdessen geht er einfach aus der schleife raus und macht mit dem resst weiter wobei dann nur müll rauskommt....<br />
was nun?<br />
achja und kannst du das mit dem ignore() bissl erläutern bin noch anfänger ^^</p>
<p>mfg<br />
danke erstmal bis hier hin^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856575</guid><dc:creator><![CDATA[Spl1nt3r]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:46:29 GMT]]></title><description><![CDATA[<p>Deine zweite und dritte if-Abfrage sind überflüssig, da du schon in der ersten auf alle Flags prüfst - da du die Flags aber schon zu Beginn zurücksetzt, sind sie immer <em>false</em> und daher wird das zu der letzten Abfrage gehörende <em>else</em> immer aufgerufen.</p>
<blockquote>
<p>achja und kannst du das mit dem ignore() bissl erläutern bin noch anfänger ^^</p>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/iostream/istream/ignore/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/ignore/</a><br />
Mit ignore kannst du die fehlerhaften Zeichen aus dem Eingabestream entfernen.</p>
<pre><code class="language-cpp">cin.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n')
</code></pre>
<p>würde die gesamte restliche Eingabe verwerfen.</p>
<p>btw: Arbeite an deiner Formatierung. Dann wäre dir das mit dem <em>else</em> wahrscheinlich selber aufgefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856586</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 13:54:53 GMT]]></title><description><![CDATA[<p>Okay da ich keine ahnung hab was die mir auf der Seite erklären möchten habe ich das einfach mal so einkopiert wie du es mir geschrieben hast...<br />
resultat....<br />
---&gt;</p>
<blockquote>
<p>Fehler 61 error C2065: 'numeric_limits': nichtdeklarierter Bezeichner c:\users\splinter\documents\visual studio 2008\projects\ogamerechner\ogamerechner\rechner beta.cpp 450</p>
</blockquote>
<p>---&gt;</p>
<blockquote>
<p>Fehler 62 error C2275: 'std::streamsize': Ungültige Verwendung dieses Typs als Ausdruck c:\users\splinter\documents\visual studio 2008\projects\ogamerechner\ogamerechner\rechner beta.cpp 450</p>
</blockquote>
<p>---&gt;</p>
<blockquote>
<p>´Fehler 64 error C2589: '(': Ungültiges Token auf der rechten Seite von '::' c:\users\splinter\documents\visual studio 2008\projects\ogamerechner\ogamerechner\rechner beta.cpp 450</p>
</blockquote>
<p>---&gt;</p>
<blockquote>
<p>Fehler 65 error C2059: Syntaxfehler: '::' c:\users\splinter\documents\visual studio 2008\projects\ogamerechner\ogamerechner\rechner beta.cpp 450</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1856594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856594</guid><dc:creator><![CDATA[Spl1nt3r]]></dc:creator><pubDate>Tue, 16 Feb 2010 13:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 14:22:40 GMT]]></title><description><![CDATA[<p>Den gesamten Streampuffer entleerst du so:</p>
<pre><code class="language-cpp">std::cin.sync(); // &quot;Synchronisiere&quot; den Stream
// oder
std::cin.ignore(std::cin.rdbuf()-&gt;in_avail()); // ignoriere die Anzahl an Zeichen im Puffer
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856619</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 16 Feb 2010 14:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 14:39:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::cin.ignore(std::cin.rdbuf()-&gt;in_avail());
</code></pre>
<p>---okay das funktioniert super bis auf dass ich jetzt wenn ich eine fehleingabe mach zb. ein buchstabe .<br />
zeigt er mir meine Fehlermeldung an ....dann werd ich wieder aufgefordert einzugeben ich geb ein ---&gt; &quot;2&quot;<br />
was ja richtig ist für ein int-wert.<br />
doch das &quot;nimmt er nicht wahr&quot; dann geb ich einfach nochmal 2 an und dann &quot; nimmt er es wahr&quot; .....warum ist das so???</p>
<pre><code class="language-cpp">while(true)
{   
	cout &lt;&lt;&quot;Geben Sie die Stufe an: &quot;;
	cin &gt;&gt; stufe;

	if(!(cin &gt;&gt; stufe))
	{	cout&lt;&lt;endl;
	cerr &lt;&lt;&quot;Fehler bei Eingabe&quot;&lt;&lt;endl;
	cin.clear();
	std::cin.ignore(std::cin.rdbuf()-&gt;in_avail());
	getch();
	}
	else 
	break;

system(&quot;cls&quot;);

}
</code></pre>
<p>EDIT: Habs schon rausgefunden sorry^^ !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856624</guid><dc:creator><![CDATA[Spl1nt3r]]></dc:creator><pubDate>Tue, 16 Feb 2010 14:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz durch Fehleingabe verhindern on Tue, 16 Feb 2010 14:57:59 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Den gesamten Streampuffer entleerst du so:</p>
<pre><code class="language-cpp">std::cin.sync(); // &quot;Synchronisiere&quot; den Stream
// oder
std::cin.ignore(std::cin.rdbuf()-&gt;in_avail()); // ignoriere die Anzahl an Zeichen im Puffer
</code></pre>
</blockquote>
<p>Dieses Verhalten ist leider nicht garantiert, da in_avail nicht die Anzahl der restlichen Zeichen im Eingabepuffer zurückgibt, sondern die <em>Mindest</em>zahl der verfügbaren Zeichen. Leider wird das (zumindest bei vielen GCC-Versionen) ziemlich wörtlich genommen, wodurch in_avail() dort sehr oft 0 zurückgibt. Auch in Fällen in denen man einen anderen Wert erwarten würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856641</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Feb 2010 14:57:59 GMT</pubDate></item></channel></rss>