<?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[cin.rdbuf()-&amp;gt;in_avail()]]></title><description><![CDATA[<p>hiho ihrs,</p>
<p>folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    unsigned short int s = 7;

    cin &gt;&gt; s;

    cout &lt;&lt; endl &lt;&lt; cin.rdbuf()-&gt;in_avail(); // 0

    system(&quot;pause&gt;nul&quot;);

    return 0;
}
</code></pre>
<p>Wenn ich nun einen unzulässigen Wert eingebe,<br />
sei es etwas Alphanumerisches oder eine zu große Zahl,<br />
wird der Zustand des Streamobjekts doch als fehlerhaft gekennzeichnet,<br />
und die Eingabe bleibt im Puffer stecken.</p>
<p>&quot; in_avail &quot; liefert doch die Anzahl der Zeichen, die im Puffer zum Lesen bereit stehen.</p>
<p>Wieso bekomme ich dann aber als Ausgabe immer 0 ?</p>
<p>-------------------------------------------------------------------------------------------------------------------------</p>
<p>[ EDIT ] noch eine Frage:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    unsigned short int s = 7;

    cin &gt;&gt; s; // Eingabe: 67890
    cout &lt;&lt; endl &lt;&lt; cin.fail(); // true
    cin.clear();
    cout &lt;&lt; endl &lt;&lt; cin.fail(); // false

    int i = 3;
    cin &gt;&gt; i; // Porg hält an oO

    system(&quot;pause&gt;nul&quot;);

    return 0;
}
</code></pre>
<p>Wieso hält das Programm bei &quot; cin &gt;&gt; i &quot; an, und wartet auf eine Eingabe,<br />
wo doch noch etwas im Puffer steht (67890) ?</p>
<p>Wenn ich etwas Alphanumerisches bei &quot; cin &gt;&gt; s &quot; eingebe, hält das Programm doch auch nicht an ... hmmm</p>
<p>danke euch <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/topic/266470/cin-rdbuf-gt-in_avail</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 07:14:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266470.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 May 2010 17:06:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Sun, 09 May 2010 18:07:57 GMT]]></title><description><![CDATA[<p>hiho ihrs,</p>
<p>folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    unsigned short int s = 7;

    cin &gt;&gt; s;

    cout &lt;&lt; endl &lt;&lt; cin.rdbuf()-&gt;in_avail(); // 0

    system(&quot;pause&gt;nul&quot;);

    return 0;
}
</code></pre>
<p>Wenn ich nun einen unzulässigen Wert eingebe,<br />
sei es etwas Alphanumerisches oder eine zu große Zahl,<br />
wird der Zustand des Streamobjekts doch als fehlerhaft gekennzeichnet,<br />
und die Eingabe bleibt im Puffer stecken.</p>
<p>&quot; in_avail &quot; liefert doch die Anzahl der Zeichen, die im Puffer zum Lesen bereit stehen.</p>
<p>Wieso bekomme ich dann aber als Ausgabe immer 0 ?</p>
<p>-------------------------------------------------------------------------------------------------------------------------</p>
<p>[ EDIT ] noch eine Frage:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    unsigned short int s = 7;

    cin &gt;&gt; s; // Eingabe: 67890
    cout &lt;&lt; endl &lt;&lt; cin.fail(); // true
    cin.clear();
    cout &lt;&lt; endl &lt;&lt; cin.fail(); // false

    int i = 3;
    cin &gt;&gt; i; // Porg hält an oO

    system(&quot;pause&gt;nul&quot;);

    return 0;
}
</code></pre>
<p>Wieso hält das Programm bei &quot; cin &gt;&gt; i &quot; an, und wartet auf eine Eingabe,<br />
wo doch noch etwas im Puffer steht (67890) ?</p>
<p>Wenn ich etwas Alphanumerisches bei &quot; cin &gt;&gt; s &quot; eingebe, hält das Programm doch auch nicht an ... hmmm</p>
<p>danke euch <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/1894761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894761</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 09 May 2010 18:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Sun, 09 May 2010 19:01:32 GMT]]></title><description><![CDATA[<p>In avail liefert die Anzahl der Zeichen die noch <strong>mindestens</strong> im Puffer sind. Die üblichen Implementierungen der Standardstreams liefern da immer eine 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894812</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 09 May 2010 19:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Sun, 09 May 2010 19:10:29 GMT]]></title><description><![CDATA[<p>habe gerade auch noch folgendes gefunden:</p>
<p>in_avail() : If a read position is available, the member function returns egptr – gptr. Otherwise, it returns showmanyc.</p>
<p>Implementierung von showmanyc in streambuf:</p>
<pre><code class="language-cpp">virtual streamsize showmanyc() { return 0; }
</code></pre>
<p>Demnach kann doch aber</p>
<pre><code class="language-cpp">cin.ignore( cin.rdbuf()-&gt;in_avail() );
</code></pre>
<p>nie funktionieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894816</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 09 May 2010 19:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Sun, 09 May 2010 19:36:32 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Demnach kann doch aber</p>
<pre><code class="language-cpp">cin.ignore( cin.rdbuf()-&gt;in_avail() );
</code></pre>
<p>nie funktionieren...</p>
</blockquote>
<p>Tut es ja auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894837</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 09 May 2010 19:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Sun, 09 May 2010 19:57:15 GMT]]></title><description><![CDATA[<p>Zum Loeschen der noch vorhandenen Zeichen im Eingabepuffer bietet sich folgendes an.</p>
<pre><code class="language-cpp">cin.clear();
	cin.sync();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1894851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894851</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Sun, 09 May 2010 19:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Mon, 10 May 2010 07:36:07 GMT]]></title><description><![CDATA[<p>BasicMan01 schrieb:</p>
<blockquote>
<p>Zum Loeschen der noch vorhandenen Zeichen im Eingabepuffer bietet sich folgendes an.</p>
<pre><code class="language-cpp">cin.clear();
	cin.sync();
</code></pre>
</blockquote>
<p>joa, aber z.B. bei diesem Beispiel hier muss man den Eingabepuffer nicht leeren, wieso?</p>
<p>- ich gebe z.B. 987654 ein --&gt; cin.fail() ist true.</p>
<p>- ich setzte die Zustandflags zurück.</p>
<p>- das Porgramm wartet dann auf eine Eingabe... wieso steht die 987654 nicht im Puffer <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    short int s = 7;

    cin &gt;&gt; s; // 987654

    cin.clear();

    int i = 5;
    cin &gt;&gt; i; // wartet auf Eingabe  :confused: 

    system(&quot;pause&quot;);

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1894969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894969</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 07:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Mon, 10 May 2010 09:14:35 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>BasicMan01 schrieb:</p>
<blockquote>
<p>Zum Loeschen der noch vorhandenen Zeichen im Eingabepuffer bietet sich folgendes an.</p>
<pre><code class="language-cpp">cin.clear();
	cin.sync();
</code></pre>
</blockquote>
<p>joa, aber z.B. bei diesem Beispiel hier muss man den Eingabepuffer nicht leeren, wieso?</p>
<p>- ich gebe z.B. 987654 ein --&gt; cin.fail() ist true.</p>
<p>- ich setzte die Zustandflags zurück.</p>
<p>- das Porgramm wartet dann auf eine Eingabe... wieso steht die 987654 nicht im Puffer <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    short int s = 7;
    
    cin &gt;&gt; s; // 987654
    
    cin.clear();
    
    int i = 5;
    cin &gt;&gt; i; // wartet auf Eingabe  :confused: 
    
    system(&quot;pause&quot;);
    
    return 0;
}
</code></pre>
</blockquote>
<p><code>basic_istream&lt;...&gt;&amp; operator&gt;&gt; (basic_istream&lt;...&gt;&amp;, charT*)</code> benutzt intern <code>std::num_get::get</code> , und das konsumiert(!) so viele für den gegebenen Typen gültige Zeichen aus dem Stream, wie möglich. Für <code>short int</code> ist alles, wo <code>std::isdigit</code>  <code>true</code> zurückgibt ein gültiges Zeichen.</p>
<p>Das der von Dir übergebene Typ zu klein ist, um den übergebenen Wert zu fassen, bemerkt <code>num_get::get</code> erst, wenn es versucht, den eingelesenen Wert in Deine Variable zu schreiben. Das führt zum Setzen des Fehlerflags. Da zu diesem Zeitpunkt die Zeichen aus dem Stream aber bereits konsumiert wurden, ist es leer. Das liegt wiederum daran, dass streams forward iteratoren benutzen. Was einmal konsumiert wurde, ist futsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894980</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 10 May 2010 09:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Mon, 10 May 2010 09:47:24 GMT]]></title><description><![CDATA[<p>ah ok,</p>
<p>worin besteht eigentlich der Unterschied zwischen basic_istream und istream ?</p>
<p>Hierachie :</p>
<p>ios_base &lt;--- basic_ios &lt;--- basic_istream<br />
ios_base &lt;--- ios &lt;--- istream</p>
<p>Laut msdn muss man für basic_istream &lt;istream&gt; inkludieren<br />
[ <a href="http://msdn.microsoft.com/en-us/library/x5507bd0%28VS.80%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/x5507bd0(VS.80).aspx</a> ]</p>
<p>Wenn ich nun &lt;istream&gt; inkludiere, hab ich dann basic_istream und istream zur Verfügung <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/1895024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895024</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 09:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Mon, 10 May 2010 09:58:10 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>ah ok,</p>
<p>worin besteht eigentlich der Unterschied zwischen basic_istream und istream ?</p>
<p>Hierachie :</p>
<p>ios_base &lt;--- basic_ios &lt;--- basic_istream<br />
ios_base &lt;--- ios &lt;--- istream</p>
<p>Laut msdn muss man für basic_istream &lt;istream&gt; inkludieren<br />
[ <a href="http://msdn.microsoft.com/en-us/library/x5507bd0%28VS.80%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/x5507bd0(VS.80).aspx</a> ]</p>
<p>Wenn ich nun &lt;istream&gt; inkludiere, hab ich dann basic_istream und istream zur Verfügung <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>
</blockquote>
<p><code>std::basic_istream</code> ist ein Template welches für unterschiedliche Char-Typen ( <code>char</code> , <code>wchar_t</code> oder sonstwas, wofür es passende Character-Traits gibt) geeignet ist. <code>std::istream</code> ist ein typedef mit <code>char</code> als Argument auf <code>std::basic_istream</code> .<br />
<a href="http://www.google.de/search?hl=de&amp;safe=off&amp;q=basic_istream+istream&amp;btnG=Suche" rel="nofollow">Google</a> ist übrigens Dein Freund...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895032</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 10 May 2010 09:58:10 GMT</pubDate></item><item><title><![CDATA[Reply to cin.rdbuf()-&amp;gt;in_avail() on Mon, 10 May 2010 10:09:00 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> hatte nie nach istream in Verbinung mit typedef gegoogelt.</p>
<p>Aber nun als du's gesagt hast, kam gleich en Treffer <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>
<pre><code class="language-cpp">typedef basic_istream&lt;char, char_traits&lt;char&gt; &gt; istream
</code></pre>
<p>danke dir <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/1895039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895039</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 10 May 2010 10:09:00 GMT</pubDate></item></channel></rss>