<?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[Endlosschleife warum?]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche mich gerade daran eine Funktion zu schreiben, die einen Fehler bei der Eingabe abfängt. Also wenn ich z.B Buchstaben in eine float Variable eingebe. Anstatt einer neuen Möglichkeit zum Eingeben, läuft das ganz als Endlosschleife durch, wenn ich die Funktion rekursiv wieder aufrufe...<br />
Liegt es evtl. daran, dass der Speicher von cin gelöscht werden muss? Wenn ja wie mache ich das?<br />
Hier der Code für die Funktion:</p>
<pre><code class="language-cpp">float eingabeVp(void)
{
    cout &lt;&lt;&quot;Bitte geben Sie Vp ein: &quot; &lt;&lt;endl;
    if(!(cin &gt;&gt; Vp))
    {
        cin.clear();
        Vp = eingabeVp();
    }
    return Vp;

}
</code></pre>
<p>Danke schon mal für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178907/endlosschleife-warum</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 01:45:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178907.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Apr 2007 13:49:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 13:49:40 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche mich gerade daran eine Funktion zu schreiben, die einen Fehler bei der Eingabe abfängt. Also wenn ich z.B Buchstaben in eine float Variable eingebe. Anstatt einer neuen Möglichkeit zum Eingeben, läuft das ganz als Endlosschleife durch, wenn ich die Funktion rekursiv wieder aufrufe...<br />
Liegt es evtl. daran, dass der Speicher von cin gelöscht werden muss? Wenn ja wie mache ich das?<br />
Hier der Code für die Funktion:</p>
<pre><code class="language-cpp">float eingabeVp(void)
{
    cout &lt;&lt;&quot;Bitte geben Sie Vp ein: &quot; &lt;&lt;endl;
    if(!(cin &gt;&gt; Vp))
    {
        cin.clear();
        Vp = eingabeVp();
    }
    return Vp;

}
</code></pre>
<p>Danke schon mal für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267128</guid><dc:creator><![CDATA[S!ggy]]></dc:creator><pubDate>Mon, 16 Apr 2007 13:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:01:25 GMT]]></title><description><![CDATA[<p>Den rekursiven Aufruf würd ich nicht machen, sondern eine einfache Schleife verwenden. Ansonsten füg mal folgendes hinter std::clear() ein:</p>
<pre><code class="language-cpp">std::cin.ignore( std::cin.rdbuf()-&gt;in_avail() );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1267136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267136</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:13:54 GMT]]></title><description><![CDATA[<p>Ich habe das ganze auch als Schleife versucht, aber auch dort das gleiche Problem.</p>
<p>Auch wenn ich</p>
<pre><code class="language-cpp">std::cin.ignore( std::cin.rdbuf()-&gt;in_avail() );
</code></pre>
<p>einfüge ändert sich nichts...Bin auch noch nicht wirklich fit in C++ und schon seit Stunden dabei rumzuprobieren aber es funktioniert einfach nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267152</guid><dc:creator><![CDATA[S!ggy]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:14:30 GMT]]></title><description><![CDATA[<p>Wenn cin sich den Kram nicht direkt im eigenen streambuf-Objekt vorhält (bzw. die Konsole das Buffering übernimmt) kommst du damit nicht wirklich weiter, will sagen, der Code erzeugt äußerst undefiniertes Verhalten. Sinnvoller ist es, die Eingabe gleich zeilenweise einzulesen und zu interpretieren - dann gibts auch keine Probleme mit Einlesefehlern oder Rückständen im Stream.</p>
<p>Das sieht dann so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;

float eingabeVp() {
  std::string zeile;
  std::istringstream isstr;
  float ergebnis;

  do {
    std::cout &lt;&lt; &quot;Bitte geben Sie Vp ein: &quot; &lt;&lt; std::flush;

    std::getline(std::cin, zeile);

    isstr.clear();
    isstr.str(zeile);
    isstr &gt;&gt; ergebnis;
  } while(!isstr);

  return ergebnis;
}
</code></pre>
<p>...oder in sinnvollerer Weise auch</p>
<pre><code class="language-cpp">template &lt;typename t&gt; t read_type(std::string const &amp;prompt) {
  std::string zeile;
  std::istringstream isstr;
  t ergebnis;

  do {
    std::cout &lt;&lt; prompt &lt;&lt; std::flush;

    std::getline(std::cin, zeile);

    isstr.clear();
    isstr.str(zeile);
    isstr &gt;&gt; ergebnis;
  } while(!isstr);

  return ergebnis;
}

// ...

float vp = read_type&lt;float&gt;(&quot;Bitte geben Sie Vp ein: &quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1267154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267154</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:16:08 GMT]]></title><description><![CDATA[<p>hmm.</p>
<pre><code class="language-cpp">do{
    cin.clear();
    cin.ignore(cin.rdbuf()-&gt;in_avail());
    cin&gt;&gt;variable;
}while(cin.fail());
</code></pre>
<p>Sollte gehen, denke ich. Versuchs mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267158</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:16:08 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:24:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">cin.rdbuf()-&gt;in_avail()
</code></pre>
<p>ist nicht die Anzahl der Zeichen, die noch in stdin drinsteht, sondern die Anzahl der Zeichen im von std::cin gehaltenen Streambuf-Objekt. Das ist hier <em>völlig irrelevant</em>, und wenn das überhaupt funktioniert, dann nur zufällig mit der STL-Implementierung deines Compilers. Darüber hinaus kriegst du damit ganz arge Probleme, wenn dir jemand ne Datei nach stdin füttert oder vergleichbares - dieser Code ist <em>bestenfalls</em> ein ganz dreckiger Hack, der im Kontext von Standard-C++ völlig undefiniertes Verhalten erzeugt. Und sowas wollen wir doch gern vermeiden, oder?</p>
<p>Für die Aufgabe &quot;Schmeiß alles raus, was noch im Konsolenpuffer steht&quot; bietet Standard-C++ keine Möglichkeit. Das liegt daran, dass sich das Programm nicht drauf verlassen kann, dass es mit einem interaktiven Terminal verbunden ist. Wenn du so eine Funktionalität willst, musst du dich bei betriebssystemsspezifischen Bibliotheken/APIs umsehen. (termio unter POSIX-Systemen, conio unter Windows) Allerdings ist das äußerst selten die beste Möglichkeit damit umzugehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267163</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:31:39 GMT]]></title><description><![CDATA[<p>Achso, das war mir neu. Es hat bisher noch jedesmal funktionniert bei mir (Visual C++ Express 2005) Hab ich wohl Glück gehabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267170</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:35:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">cin.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n');
</code></pre>
<p>...sollte aber unabhängig vom bereits gesagten <strong>immer</strong> alle Zeichen bis zum nächsten Zeilenwechsel aus dem Stream verwerfen. Da die Eingabepufferung der Konsole (meistens) zeilenbasiert arbeitet sollte man damit recht gut fahren, ohne auf API-Funktionen zurückgreifen zu müssen, selbst wenn man eine Datei an stdin verfüttert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267172</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 14:36:01 GMT]]></title><description><![CDATA[<p>@ seldon: Danke der Code funktioniert wunderbar!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13317">@Shinja</a>: Der Code läuft bei mir immer noch in der Endlosschleife...<br />
Danke trotzdem..</p>
<p>Gruß S</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267173</guid><dc:creator><![CDATA[S!ggy]]></dc:creator><pubDate>Mon, 16 Apr 2007 14:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 15:04:03 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>...<br />
Für die Aufgabe &quot;Schmeiß alles raus, was noch im Konsolenpuffer steht&quot; bietet Standard-C++ keine Möglichkeit....</p>
</blockquote>
<p>Den Verdacht hatte ich auch schon (nachdem ich mir auch lange mit in_avail() vergeblich die Finger gebrochen habe) .... gut, dass DEu das jetzt bestätigst.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267194</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 16 Apr 2007 15:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 15:05:44 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...sollte ... <strong>immer</strong> ... meistens...</p>
</blockquote>
<p>Mit dieser Wortkombination habe ich meistens immer Schwierigkeiten. <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267197</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 16 Apr 2007 15:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 15:14:41 GMT]]></title><description><![CDATA[<p>Inwiefern steht die Aussage, dass dieser Aufruf immer alle Zeichen bis zum nächsten '\n' liest im Widerspruch zu der Aussage dass die Konsole meistens zeilenbasiert arbeitet?</p>
<p>EDIT:<br />
Ergänzend dazu, wenn sie zeichenweise arbeitet ists auch egal, dann muss die Implementierung (Streambuffer) nur kleinere Häppchen verarbeiten, wenn sie rein blockweise arbeitet kann man praktisch eh nicht mit Konsolenprogrammen arbeiten.</p>
<p>Und &quot;sollte immer&quot; interpretiere ich als &quot;ich meine, ...&quot; (Ausdruck für nicht 100%ige Sicherheit) &quot;...das ist immer so&quot; (Ausdruck dafür, dass keine Abweichung vorkommt) <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/1267202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267202</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 16 Apr 2007 15:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 15:37:16 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Inwiefern steht die Aussage, dass dieser Aufruf immer alle Zeichen bis zum nächsten '\n' liest im Widerspruch zu der Aussage dass die Konsole meistens zeilenbasiert arbeitet?...</p>
</blockquote>
<p>Nun, mit einem fetten &quot;immer&quot; könnte jemand halt auf die Idee kommen, dass Du hier eine Lösung vorschlägst, die eben &quot;immer&quot; funktioniert.... was aber für nicht-zeilenbasierte Konsolen doch nicht zutrifft. <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267222</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 16 Apr 2007 15:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Mon, 16 Apr 2007 17:11:13 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>was aber für nicht-zeilenbasierte Konsolen doch nicht zutrifft. <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>
</blockquote>
<p>Dazu siehe EDIT <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>
<p>Wie gesagt auf blockbasierten Konsolen kann man sich die Konsolenprogrammierung eh schenken, da nicht garantiert ist dass beim Druck der Enter-Taste überhaupt schon was beim Programm ankommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267264</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 16 Apr 2007 17:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to Endlosschleife warum? on Tue, 17 Apr 2007 06:58:20 GMT]]></title><description><![CDATA[<p>Ergo: Für zeilenbasierte Konsolen ist Dein Vorschlag prima, für alle anderen weiß man's nicht. =&gt; Es gibt nicht &quot;DEN 100%-igen Weg&quot; ... man hängt immer am Wohl und Wehe der jewiligen Konsole. Aber immerhin sind &quot;die meisten&quot; zeilenbasiert.</p>
<p>Mehr wollte ich gar nicht aussagen - typisches Beispiel eben für die Kombination &quot;meistens immer&quot; <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267498</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 17 Apr 2007 06:58:20 GMT</pubDate></item></channel></rss>