<?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[If-Anweisung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Bin Anfänger und bin gerade dabei, mein mehr oder weniger erstes Programm zu schreiben. Dabei stehe ich vor vollgenden Problem:</p>
<p>Der Anwender soll eine Zahl eingeben:</p>
<p>cout &lt;&lt; &quot;Bitte geben Sie eine Zahl ein !&quot; &lt;&lt; endl;<br />
cin &gt;&gt; zahl;</p>
<p>(Das Grundgerüst lasse ich mal weg)</p>
<p>Wenn jetzt der Anwender aber Blödsinn eingibt, z.b. buchstaben, möchte ich das das Programm das erkennt und eine Fehlermeldung ausgibt!</p>
<p>Mit einer If-Anweisung komme ich nicht weiter.</p>
<p>Kann mir wer einen Tipp geben?</p>
<p>PS: Nutze Dev-C++ und das Programm ist für die Konsole</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/122442/if-anweisung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 07:14:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122442.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Oct 2005 18:56:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 18:56:09 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Bin Anfänger und bin gerade dabei, mein mehr oder weniger erstes Programm zu schreiben. Dabei stehe ich vor vollgenden Problem:</p>
<p>Der Anwender soll eine Zahl eingeben:</p>
<p>cout &lt;&lt; &quot;Bitte geben Sie eine Zahl ein !&quot; &lt;&lt; endl;<br />
cin &gt;&gt; zahl;</p>
<p>(Das Grundgerüst lasse ich mal weg)</p>
<p>Wenn jetzt der Anwender aber Blödsinn eingibt, z.b. buchstaben, möchte ich das das Programm das erkennt und eine Fehlermeldung ausgibt!</p>
<p>Mit einer If-Anweisung komme ich nicht weiter.</p>
<p>Kann mir wer einen Tipp geben?</p>
<p>PS: Nutze Dev-C++ und das Programm ist für die Konsole</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/885975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885975</guid><dc:creator><![CDATA[Bjoern1982]]></dc:creator><pubDate>Wed, 05 Oct 2005 18:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:03:31 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Prüfe einfach den Stream. Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
   std::cout &lt;&lt; &quot;\nplease enter a number: &quot;;
   int x;
   while(!(std::cin &gt;&gt; x)) // Wenn etwas unkorrektes eingegeben wurde
   {
       std::cout &lt;&lt; &quot;\nyou should enter a number! please retry\n&quot;;
       std::cin.clear(); // Eventuelle Fehlerflags löschen.
       std::cin.sync(); // Std-Eingabe leeren.
   }
   std::cout &lt;&lt; &quot;you entered &quot; &lt;&lt; x &lt;&lt; std::endl;
   return 0;
}
</code></pre>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/885980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885980</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:14:12 GMT]]></title><description><![CDATA[<p>Hier noch mal was einfacher :P, mit der If-Anweisung die du wolltest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">if(cin.fail())   //cin.fail() gibt true zurück wenn irgendein Fehler aufgetreten
                 //ist, zB das du in ein int ein char schreibst

{
    cin.clear(); //Fehlerbits löschen
    cin.sync();  //Den fehlerhaften Buffer löschen der noch drin steht also die char's
}
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6091">@Caipi</a>:<br />
Wo hast du sync() her. Das sehe ich ja zum ersten Mal. In meinem Referenzbuch steht nichts davon und auch bei cppreferenc nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/885994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885994</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:14:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">do
{
      // Wird erst ab einem möglichen 2. Durchlauf wichtig
	cin.clear(); // Löscht den Fehlerstatus von cin
	cin.ignore(cin.rdbuf()-&gt;in_avail()); // Ignoriert bisher eingegebene Zeichen

	cout &lt;&lt; &quot;Zahl eingeben: &quot; &lt;&lt; flush;
	cin &gt;&gt; zahl; // Einlesen
}
while(!cin); // Schleife läuft nur bei Fehler beim Einlesen weiter
</code></pre>
<p>Wenn ein Fehler passiert wird bei cin ein Fehlerstatus gesetzt. Bevor wieder eingelesen werden kann muss dieser gelöscht werden (deswegen vor dem Einlesen cin.clear).</p>
<p>Desweiteren müssen wir alle im Puffer (cin.rdbuf) noch vorhandenen Zeichen (-&gt;in_avail) ignorieren (cin.ignore) sonst versucht er beim nächsten Mal wieder das selbe Zeichen in zB den int zu bekommen und der Fehler würde abermals auftreten.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/885995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885995</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:15:15 GMT]]></title><description><![CDATA[<p>sync() oder ignore() richtig?</p>
<p>Humeee? <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>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/885997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885997</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:16:43 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>sync() oder ignore() richtig?</p>
</blockquote>
<p>sync steht jedenfalls im Struppi drin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/885999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/885999</guid><dc:creator><![CDATA[YASC]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:24:42 GMT]]></title><description><![CDATA[<p>Wieso funktioniert das eigentlich mit</p>
<pre><code class="language-cpp">cin.ignore(cin.rdbuf()-&gt;in_avail());
</code></pre>
<p>im Dev C++ nicht. Jedenfalls bei mir...<br />
Der ignoriert halt nichts.</p>
<p>Wenn ich jedoch nur ignorere() oder sync() aufrufe kalppt es.</p>
<p>Im BCB funktioniert beider <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/886002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886002</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:34:41 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>sync() oder ignore() richtig?</p>
<p>Humeee? <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>Weder noch. Keines von beiden garantiert das Verhalten, was hier gewollt ist.<br />
in_avail kann auch immer 0 liefern (wie z.B. bei der gcc Implementation) und das Verhalten von sync ist nur für Ausgabeströme spezifiziert.</p>
<blockquote>
<p>sync steht jedenfalls im Struppi drin</p>
</blockquote>
<p>Leider ist das aber keine authoritative Quelle. Der Standard garantiert das Verhalten, was Stroustrup in seinem Buch beschreibt nicht.</p>
<p>Portabel ist wahrscheinlich nur:</p>
<pre><code class="language-cpp">while (cin.get() != '\n');
</code></pre>
<p>mit all seinen Nachteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886010</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:39:06 GMT]]></title><description><![CDATA[<p>a) Wer garantiert mir das die Eingabe ganz sicher mit '\n' abgeschlossen wurde?<br />
b) Sieht der Standard das Leeren des Input-Streams in keiner Weise vor?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886014</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:39:57 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>SideWinder schrieb:</p>
<blockquote>
<p>sync() oder ignore() richtig?</p>
<p>Humeee? <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>[...]und das Verhalten von sync ist nur für Ausgabeströme spezifiziert.</p>
</blockquote>
<p>Wäre auch zu schön gewesen... Aber wie meinst du das genau?</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886015</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:46:15 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>a) Wer garantiert mir das die Eingabe ganz sicher mit '\n' abgeschlossen wurde?</p>
</blockquote>
<p>Niemand. Genau so wie dir niemand garantiert, dass überhaupt Zeichen im Puffer stehen. D.h. die Schleife kann potentiell blockieren (bis jemand Enter drückt).<br />
Deshalb schrieb ich ja &quot;mit all seinen Nachteilen&quot;.</p>
<blockquote>
<p>b) Sieht der Standard das Leeren des Input-Streams in keiner Weise vor?</p>
</blockquote>
<p>Doch schon, aber halt nur auf C++ Ebene.<br />
Der Standard kennt aber weder eine Tastatur noch einen Tastaturpuffer und das ist das Problem. Wenn die Implementation z.B. einfach einen vorhandenen Tastaturpuffer benutzt, statt den Stream auf C++ Ebene zu puffern, dann gibt<br />
es aus Sicht von Standard-C++ eben keine Möglichkeit den Puffer zu leeren, da nichts zwischen der aktuellen Leseposition und dem Ende des Lesepuffers steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886021</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Wed, 05 Oct 2005 19:52:21 GMT]]></title><description><![CDATA[<p>Caipi schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>SideWinder schrieb:</p>
<blockquote>
<p>sync() oder ignore() richtig?</p>
<p>Humeee? <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>[...]und das Verhalten von sync ist nur für Ausgabeströme spezifiziert.</p>
</blockquote>
<p>Wäre auch zu schön gewesen... Aber wie meinst du das genau?</p>
</blockquote>
<p>std::istream::sync ruft std::streambuf::pubsync auf, was wiederum std::streambuf::sync aufruft. Für diese Funktion wird aber nur für die &quot;Put-Area&quot; ein interessantes Verhalten spezifiziert. Ansonsten ist das Default-Verhalten einfach die Rückgabe von 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886027</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 05 Oct 2005 19:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Thu, 06 Oct 2005 18:10:46 GMT]]></title><description><![CDATA[<p>Danke, hat mir gut weitergeholfen!</p>
<p>Gruß</p>
<p>Bjoern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886616</guid><dc:creator><![CDATA[Bjoern1982]]></dc:creator><pubDate>Thu, 06 Oct 2005 18:10:46 GMT</pubDate></item><item><title><![CDATA[Reply to If-Anweisung on Fri, 07 Oct 2005 16:20:12 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Caipi schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>SideWinder schrieb:</p>
<blockquote>
<p>sync() oder ignore() richtig?</p>
<p>Humeee? <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>[...]und das Verhalten von sync ist nur für Ausgabeströme spezifiziert.</p>
</blockquote>
<p>Wäre auch zu schön gewesen... Aber wie meinst du das genau?</p>
</blockquote>
<p>std::istream::sync ruft std::streambuf::pubsync auf, was wiederum std::streambuf::sync aufruft. Für diese Funktion wird aber nur für die &quot;Put-Area&quot; ein interessantes Verhalten spezifiziert. Ansonsten ist das Default-Verhalten einfach die Rückgabe von 0.</p>
</blockquote>
<p>Danke. (Ist zwar ein bischen verspätet, aber trotzdem :)).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887253</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Fri, 07 Oct 2005 16:20:12 GMT</pubDate></item></channel></rss>