<?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 und Puffer]]></title><description><![CDATA[<p><strong>1.</strong><br />
Ich mach grad so n Tutorial, und wenn ich alles richtig verstanden habe, ist das doch so, wenn man mit &quot;cin.getline(x,SIZE)&quot; arbeitet, dann wird alles erst in einen großen &quot;Puffer&quot; geschrieben, und was dann im Puffer drin steht wird an &quot;x&quot; übergeben?!</p>
<p>1.Kann mir das jemand von euch nochmal genau verdeutlichen?<br />
2.Wieviele Zeichen passen in den Puffer genau rein?<br />
3.Ist das mit dem Puffer nur bei &quot;cin.getline()&quot; so, oder auch beim ganz normalen cin &gt;&gt; x?<br />
4.Was für standard Befehle sollte man für den Puffer wissen? (wichtigsten)</p>
<p><strong>2.</strong><br />
Bei folgendem Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

const int SIZE=12;
int main()
{
    char var1[SIZE];
    char var2[SIZE];

    cin.getline(var1,SIZE);
    var1[SIZE-1]='\0';

    //ausgabe
    cout &lt;&lt; var1 &lt;&lt; endl;

    //cin.seekg(0,ios::end);

    cin.getline(var2,SIZE);
    var1[SIZE-1]='\0';

    //ausgabe
    cout &lt;&lt; var2 &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Wenn ich beim ersten &quot;cin.getline(var1,SIZE);&quot; mehr als 12 Buchstaben reinschreibe steht ja noch was im Puffer, somit überspringt er anscheinend gleich &quot;cin.getline(var2,SIZE);&quot; (ist mir aufgefallen) da er denkt, es wurd schon was eingegeben!?<br />
Um diese Problem zu lösen, habe ich &quot;cin.seekg(0,ios::end);&quot; eingefügt, in der Hoffnung das dann der Puffer geleert wird, und &quot;cin.getline(var2,SIZE);&quot; in jedem Fall funktioniert. Dochh wenn sich das &quot;cin.seekg(0,ios::end);&quot; im Code befindet, wird IMMER das zweite cin.getline übersprungen, egal ob beim ersten die Buchstabenanzahl überschritten wurde oder nicht.<br />
(Wenn ich die Buchstabenanzahl im ersten cin nicht überschreite, dann wird das zweite cin natürlich auch aufgerufen. )<br />
Wie kann ich den jetzt aber mein Problem lösen? Also, wenn ich im ersten cin die Buchstabenanzahl überschreite möchte ich dass das zweite cin trotzdem aufgerufen wird! Ich schätze mal das liegt daran das halt noch was im Puffer steht oder? Kanns mir jemand sagen, und bitte auch erklären.</p>
<p>Dankeschön schon mal im Voraus.<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198664/cin-und-puffer</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 16:01:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198664.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Nov 2007 22:17:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cin und Puffer on Fri, 23 Nov 2007 22:17:00 GMT]]></title><description><![CDATA[<p><strong>1.</strong><br />
Ich mach grad so n Tutorial, und wenn ich alles richtig verstanden habe, ist das doch so, wenn man mit &quot;cin.getline(x,SIZE)&quot; arbeitet, dann wird alles erst in einen großen &quot;Puffer&quot; geschrieben, und was dann im Puffer drin steht wird an &quot;x&quot; übergeben?!</p>
<p>1.Kann mir das jemand von euch nochmal genau verdeutlichen?<br />
2.Wieviele Zeichen passen in den Puffer genau rein?<br />
3.Ist das mit dem Puffer nur bei &quot;cin.getline()&quot; so, oder auch beim ganz normalen cin &gt;&gt; x?<br />
4.Was für standard Befehle sollte man für den Puffer wissen? (wichtigsten)</p>
<p><strong>2.</strong><br />
Bei folgendem Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

const int SIZE=12;
int main()
{
    char var1[SIZE];
    char var2[SIZE];

    cin.getline(var1,SIZE);
    var1[SIZE-1]='\0';

    //ausgabe
    cout &lt;&lt; var1 &lt;&lt; endl;

    //cin.seekg(0,ios::end);

    cin.getline(var2,SIZE);
    var1[SIZE-1]='\0';

    //ausgabe
    cout &lt;&lt; var2 &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Wenn ich beim ersten &quot;cin.getline(var1,SIZE);&quot; mehr als 12 Buchstaben reinschreibe steht ja noch was im Puffer, somit überspringt er anscheinend gleich &quot;cin.getline(var2,SIZE);&quot; (ist mir aufgefallen) da er denkt, es wurd schon was eingegeben!?<br />
Um diese Problem zu lösen, habe ich &quot;cin.seekg(0,ios::end);&quot; eingefügt, in der Hoffnung das dann der Puffer geleert wird, und &quot;cin.getline(var2,SIZE);&quot; in jedem Fall funktioniert. Dochh wenn sich das &quot;cin.seekg(0,ios::end);&quot; im Code befindet, wird IMMER das zweite cin.getline übersprungen, egal ob beim ersten die Buchstabenanzahl überschritten wurde oder nicht.<br />
(Wenn ich die Buchstabenanzahl im ersten cin nicht überschreite, dann wird das zweite cin natürlich auch aufgerufen. )<br />
Wie kann ich den jetzt aber mein Problem lösen? Also, wenn ich im ersten cin die Buchstabenanzahl überschreite möchte ich dass das zweite cin trotzdem aufgerufen wird! Ich schätze mal das liegt daran das halt noch was im Puffer steht oder? Kanns mir jemand sagen, und bitte auch erklären.</p>
<p>Dankeschön schon mal im Voraus.<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409129</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 23 Nov 2007 22:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to cin und Puffer on Fri, 23 Nov 2007 22:32:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>1.Kann mir das jemand von euch nochmal genau verdeutlichen?</p>
</blockquote>
<p>Da gabs erst vor ein paar Tagen einen ausführlichen Thread dazu: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-197930.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-197930.html</a></p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>2.Wieviele Zeichen passen in den Puffer genau rein?</p>
</blockquote>
<pre><code class="language-cpp">std::cout &lt;&lt; std::numeric_limits &lt;std::streamsize&gt; :: max ();
</code></pre>
<p>std::streamsize entspricht hierbei einem <em>unsigned int</em>. Auf einem 32 Bit System passen also 2147483647 Zeichen in den Buffer.</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>3.Ist das mit dem Puffer nur bei &quot;cin.getline()&quot; so, oder auch beim ganz normalen cin &gt;&gt; x?</p>
</blockquote>
<p>Bei jeder Einleseoperation wird in den internen Buffer geschrieben, daher verhält es sich gleich.</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>4.Was für standard Befehle sollte man für den Puffer wissen? (wichtigsten)</p>
</blockquote>
<p>Das kommt auf die Situation drauf an... ganz objektiv kann ich dir jetzt dazu keine Tipps geben, aber diese Referenz hilft dir weiter: <a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a></p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>Wenn ich beim ersten &quot;cin.getline(var1,SIZE);&quot; mehr als 12 Buchstaben reinschreibe steht ja noch was im Puffer, somit überspringt er anscheinend gleich &quot;cin.getline(var2,SIZE);&quot; (ist mir aufgefallen) da er denkt, es wurd schon was eingegeben!?</p>
</blockquote>
<p>Genau, dein Denkansatz ist schonmal richtig. Ziel ist es, wie du es schon erkannt hast, den Eingabebuffer zu leeren, damit beim darauffolgenden Aufruf von getline() die verbliebenen Zeichen nicht als Eingabe interpretiert werden. Das müsste dir weiterhelfen:</p>
<pre><code class="language-cpp">std::cin.clear(); 
std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),'\n');
</code></pre>
<p><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/1409133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409133</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Fri, 23 Nov 2007 22:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to cin und Puffer on Fri, 23 Nov 2007 23:06:45 GMT]]></title><description><![CDATA[<p>Okay, hab noch Fragen zu:</p>
<pre><code class="language-cpp">std::cin.clear(); 
std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),'\n');
</code></pre>
<p>Ich will das noch genauer wissen:<br />
1. Was genau bewirkt &quot;std::cin.clear()&quot;, wie der Name schon sagt wird anscheinend was gelöscht?! Wird da der Puffer Inhalt gelöscht, wenn ja für was braucht man dann noch die lange darauffolgende Zeile Code?<br />
2. Was bewirkt std::cin.ignore und für was steht das &quot;\n&quot; als letzter Parameter?<br />
3. Was passiert bei &quot;std::numeric_limits<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max()&quot;, das gehts irgendwie um eine maximal größe oder? Aber ich will das ganz genau wissen, was ist &quot;std::streamsize&quot;.......</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409144</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 23 Nov 2007 23:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to cin und Puffer on Fri, 23 Nov 2007 23:24:00 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>1. Was genau bewirkt &quot;std::cin.clear()&quot;, wie der Name schon sagt wird anscheinend was gelöscht?! Wird da der Puffer Inhalt gelöscht, wenn ja für was braucht man dann noch die lange darauffolgende Zeile Code?</p>
</blockquote>
<p>Ich hatte dir schon vorher den Link zur C++ Reference gegeben, dort steht alles beschrieben: <a href="http://www.cplusplus.com/reference" rel="nofollow">www.cplusplus.com/reference</a> (Oben einfach Suchbegriff eingeben)</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>3. Was passiert bei &quot;std::numeric_limits<a href="std::streamsize" rel="nofollow">std::streamsize</a>::max()&quot;, das gehts irgendwie um eine maximal größe oder? Aber ich will das ganz genau wissen, was ist &quot;std::streamsize&quot;.......</p>
</blockquote>
<p>Naja, zu &quot;numeric_limits wäre das das erste Suchergebnis bei Google gewesen: <a href="http://www.cpp-tutor.de/cpp/le13/le13_03.htm#num" rel="nofollow">http://www.cpp-tutor.de/cpp/le13/le13_03.htm#num</a></p>
<p>Und was std::streamsize bedeutet, hätte dir auch die <a href="http://cplusplus.com" rel="nofollow">cplusplus.com</a> Reference erklärt:</p>
<p><a href="http://cplusplus.com" rel="nofollow">cplusplus.com</a> reference schrieb:</p>
<blockquote>
<p>The type is an implementation-defined synonym of one of the signed basic integral types (generally signed int or signed long).</p>
</blockquote>
<p>...also ein typedef auf int oder long.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409148</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Fri, 23 Nov 2007 23:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to cin und Puffer on Mon, 26 Nov 2007 07:19:42 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>2.Wieviele Zeichen passen in den Puffer genau rein?</p>
</blockquote>
<p>Ausreichend - und wenn's tatsächlich nicht reicht, holt sich cin deine Eingabedaten halt stückweise.</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>1. Was genau bewirkt &quot;std::cin.clear()&quot;, wie der Name schon sagt wird anscheinend was gelöscht?! Wird da der Puffer Inhalt gelöscht, wenn ja für was braucht man dann noch die lange darauffolgende Zeile Code?<br />
2. Was bewirkt std::cin.ignore und für was steht das &quot;\n&quot; als letzter Parameter?</p>
</blockquote>
<p>clear() setzt die Fehlerflags von cin zurück, ignore() liest Eingaben und verwirft sie (die beiden Parameter sind die Maximalzahl an ignorierten Zeichen und das Zeilen-Trennzeichen - wenn er eins von beidem erreicht hat, stoppt ignore()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1410150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1410150</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 26 Nov 2007 07:19:42 GMT</pubDate></item></channel></rss>