<?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 seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung]]></title><description><![CDATA[<p>Gemäss dem untenstehenden Beispiel möchte ich eine double-Variable mit cin eingeben, dabei erfolgt eine Plausibilitätsprüfung der Eingabe. Je nach Eingabe kommt es zu einem (mir) rätselhaften Verhalten von cin. Ich bin nur Hobbyprogrammierer und den untenstehenden Code kann man sicherlich besser programmieren. Ich verstehe es aber trotzdem 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="😞"
    /> Ich möchte ja auch eigentlich eine Eingabe von Buchstaben verhindern, denn MASSE ist ein double...<br />
Wie mache ich das???</p>
<pre><code>double MASSE;

while ( true )
    {
      cout &lt;&lt; &quot;Bitte Eingabe Masse&quot; &lt;&lt; endl;
      fflush (stdin);
      cin &gt;&gt; MASSE;
      fflush (stdin);
      if ( MASSE &gt;= 10 ) break;
      else
      {
        cout &lt;&lt; &quot;Dies ist keine gueltige Eingabe!&quot; &lt;&lt; endl;
	fflush (stdin);
      }
    }
</code></pre>
<p>Bei Eingabe von z.B. 3 ist alles i.O. - es wird erneut abgefragt.<br />
Bei Eingabe von z.B. 13 ist alles i.O. - es geht weiter.<br />
Wenn ich zuerst 3 eingebe und dann bei der erneuten Aufforderung zur Eingabe diesmal z.B. df eingebe, bin ich plötzlich in einer Endlosschleife gefangen.<br />
Wenn ich z.B. df oder f sofort eingebe, geht es weiter obwohl das natürlich nicht korrekt ist (double-Variable).<br />
Wie kann ich diese Eingabe narrensicher machen?? Helft mir bitte mal weiter!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184227/cin-seltsames-verhalten-in-while-schleife-mit-plausibilitätsprüfung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 17:10:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184227.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jun 2007 13:21:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 13:21:56 GMT]]></title><description><![CDATA[<p>Gemäss dem untenstehenden Beispiel möchte ich eine double-Variable mit cin eingeben, dabei erfolgt eine Plausibilitätsprüfung der Eingabe. Je nach Eingabe kommt es zu einem (mir) rätselhaften Verhalten von cin. Ich bin nur Hobbyprogrammierer und den untenstehenden Code kann man sicherlich besser programmieren. Ich verstehe es aber trotzdem 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="😞"
    /> Ich möchte ja auch eigentlich eine Eingabe von Buchstaben verhindern, denn MASSE ist ein double...<br />
Wie mache ich das???</p>
<pre><code>double MASSE;

while ( true )
    {
      cout &lt;&lt; &quot;Bitte Eingabe Masse&quot; &lt;&lt; endl;
      fflush (stdin);
      cin &gt;&gt; MASSE;
      fflush (stdin);
      if ( MASSE &gt;= 10 ) break;
      else
      {
        cout &lt;&lt; &quot;Dies ist keine gueltige Eingabe!&quot; &lt;&lt; endl;
	fflush (stdin);
      }
    }
</code></pre>
<p>Bei Eingabe von z.B. 3 ist alles i.O. - es wird erneut abgefragt.<br />
Bei Eingabe von z.B. 13 ist alles i.O. - es geht weiter.<br />
Wenn ich zuerst 3 eingebe und dann bei der erneuten Aufforderung zur Eingabe diesmal z.B. df eingebe, bin ich plötzlich in einer Endlosschleife gefangen.<br />
Wenn ich z.B. df oder f sofort eingebe, geht es weiter obwohl das natürlich nicht korrekt ist (double-Variable).<br />
Wie kann ich diese Eingabe narrensicher machen?? Helft mir bitte mal weiter!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304847</guid><dc:creator><![CDATA[Matop]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 13:57:42 GMT]]></title><description><![CDATA[<p>Scanf hätte den Vorteil, dass Dir die Funktion mitteilt, wieviele Werte erfolgreich eingelesen wurden. Wenn scanf einen Wert kleiner als die Anzahl der erwarteten Eingabewerte zurückgibt, dann weißt Du, dass der User groben Unfug eingegeben hat. Mit einer while(fgetc(stdin)!='\n'); Schleife kannst Du dann den Eingabebuffer ausräumen. Und dann gibst Du dem User erneut eine Chance, vernünftige und ausreichend viele Werte einzugeben.<br />
Am besten man sperrt den User in einem do ... while Konstrukt ein! Solange, bis scanf Dir mitteilt, dass genügend Werte erfolgreich eingelesen wurden.<br />
Leider schweigt der Transferoperator der Streams sehr ausgiebig, wenn man abfragen möchte, wieviele Werte erfolgreich eingelesen wurden. Also besser scanf verwenden. Ausnahmsweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304888</guid><dc:creator><![CDATA[Narrensicher]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:14:29 GMT]]></title><description><![CDATA[<p>Edit: das war noch nicht so doll, lieber wieder entfernen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1304890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304890</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:11:36 GMT]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">cin &gt;&gt; MASSE;
if(cin.fail()) // fail() = input/output Fehler, zB bei char in int eingelesen
{
    cin.clear(); // Fehlerflags löschen
    std::string temp = &quot;&quot;;
    getline(cin,temp); // Müll ausm Buffer weglesen
    // raus break, return sonstwas
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304906</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:12:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

bool readDouble(double&amp; value)
{
	std::string line;
	std::getline(std::cin, line);
	std::istringstream iss(line);

	if(iss &gt;&gt; value)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	double masse;

	while(!readDouble(masse))
	{
		std::cout &lt;&lt; &quot;Falsche Eingabe!&quot; &lt;&lt; &quot;\n&quot;;
	}

	std::cout &lt;&lt; &quot;Masse: &quot; &lt;&lt; masse &lt;&lt; &quot;\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304907</guid><dc:creator><![CDATA[devill]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:12:18 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:17:10 GMT]]></title><description><![CDATA[<p>proggingmania schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
 
int main()
{	
    double dMasse = 10;
	cin.clear();
	while ( dMasse &lt; 0 || dMasse &gt;= 10 ) 
    { 
      cout &lt;&lt; &quot;Bitte Eingabe Masse&quot; &lt;&lt; endl; 
         cin &gt;&gt; dMasse; 
   } 
 return 0;
}
</code></pre>
</blockquote>
<p>wird nicht hinhauen bei ner eingabe von zeichen , da bist du wieder in endlosschleife.. versuch die eingabe lieber per string und wandel das um,<br />
strings lassen sich besser kontrollieren<br />
du kannst ja mal anschauen was nach der fehlerhaften eingabe bei den Fehlerstromflags passiert</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;After a bad input operation:&quot;
		&lt;&lt; &quot;\ncin.rdstate(): &quot; &lt;&lt; cin.rdstate()
		&lt;&lt; &quot;\n cin.eof(): &quot; &lt;&lt; cin.eof()
		&lt;&lt; &quot;\n cin.fail(): &quot; &lt;&lt; cin.fail()
		&lt;&lt; &quot;\n cin.bad(): &quot; &lt;&lt; cin.bad()
		&lt;&lt; &quot;\n cin.good(): &quot; &lt;&lt; cin.good() &lt;&lt; endl &lt;&lt; endl;
	cin.clear(); // clear stream
	// display results of cin functions after clearing cin
	cout &lt;&lt; &quot;After cin.clear()&quot; &lt;&lt; &quot;\ncin.fail(): &quot; &lt;&lt; cin.fail()
		&lt;&lt; &quot;\ncin.good(): &quot; &lt;&lt; cin.good() &lt;&lt; endl;
</code></pre>
<p>wenn das failbit gesetzt ist kommt es zur endlosschleife. egal ob da noch ein cin kommt oder net.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304911</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:31:41 GMT]]></title><description><![CDATA[<p>meine is auch noch nicht ganz richtig. <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/1304932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304932</guid><dc:creator><![CDATA[devill]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 14:45:54 GMT]]></title><description><![CDATA[<p>bin überwältigt... danke mal an alle!<br />
muss das erstmal sortieren, es gibt anscheinend unendliche Möglichkeiten.<br />
Muss dazu sagen, dass ich eigentlich C programmiere (mehr schlecht als recht <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="😉"
    /> ], C++ kann man das nicht nennnen. daher tue ich mir auch schwer mit gewissen Vorschlägen von Euch. Wenn ich den Code ansehe ist mir vieles plausibel und manches verstehe ich nicht. habe z.B. schon krampfhaft nach diesen Möglichkeiten für cin.irgendwas gesucht, wo ist denn das dokumentiert. Kenne nur cin.getline. das benutze ich auch, weil ich ein Beispiel habe...</p>
<p>Also wenn ihr noch mehr code habt, nur zu, werde dann morgen mal die für mich plausibelsten Lösungen testen, danke! <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="🙂"
    /> <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/1304941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304941</guid><dc:creator><![CDATA[Matop]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:28:20 GMT]]></title><description><![CDATA[<p>sten schrieb:</p>
<blockquote>
<p>wird nicht hinhauen bei ner eingabe von zeichen , da bist du wieder in endlosschleife.. versuch die eingabe lieber per string und wandel das um,<br />
strings lassen sich besser kontrollieren<br />
du kannst ja mal anschauen was nach der fehlerhaften eingabe bei den Fehlerstromflags passiert</p>
</blockquote>
<p>Stimmt, daher hab ich es lieber gleich wieder rausgenommen, damit das niemand unnötigerweise kopiert und ausprobiert.</p>
<p>Hab mir jetzt eine Lösung zurechtgebastelt, die deiner Beschreibung entspricht und bombensicher ist. <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">#include &lt;iostream&gt;
using namespace std;

int main()
{
	double dMasse;
	char buf[80];
	char *err_ptr = NULL;

	do
	{
		err_ptr = NULL;
		cout &lt;&lt; &quot;Bitte geben sie die Masse ein: &quot; &lt;&lt; endl; 
        cin.getline( buf, 80 );
		dMasse = strtod( buf, &amp;err_ptr );
	}
	while ( *err_ptr != '\0' );

   return 0;
}
</code></pre>
<p>Edit: '}' Klammer vergessen <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="😃"
    /><br />
Edit: Bombensicher ist das doch noch nicht, nämlich wenn man mehr als 80 Zeichen eingibt. Dann wird die Eingabe ja abgeschnitten und man erhält eine kleinere Zahl als eingegeben. Shit.</p>
<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/1304961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304961</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:06:44 GMT]]></title><description><![CDATA[<p>ich hoffe jetzt ist meins richtig:</p>
<pre><code class="language-cpp">bool readDouble(double&amp; value)
{
	std::string line;
	std::getline(std::cin, line);
	std::istringstream iss(line);

	if(iss &gt;&gt; value)
	{
		iss &gt;&gt; std::ws; // Leerzeichen verschlucken
		return iss.eof();
	}

	return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304963</guid><dc:creator><![CDATA[devill]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:14:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15036">@proggingmania</a>: wenn man enter drückt wird die schleife schon verlassen. <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/1304972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304972</guid><dc:creator><![CDATA[bombensicher??]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 15:41:23 GMT]]></title><description><![CDATA[<p>Würde folgendes funktionnieren?</p>
<pre><code class="language-cpp">int main(){
    double d=0.0;
    do{
        while(!(cin&gt;&gt;d)){
            cin.clear();
            cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); //danke an David_pb (siehe unten)
        }
    }while(d&gt;0.0 &amp;&amp; d&lt;10.0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1304988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304988</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Thu, 14 Jun 2007 15:41:23 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:28:34 GMT]]></title><description><![CDATA[<p>Meine gängige/gebräuchlische Lösung interessiert wohl niemanden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304990</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:30:31 GMT]]></title><description><![CDATA[<p>bombensicher?? schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15036">@proggingmania</a>: wenn man enter drückt wird die schleife schon verlassen. <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>
</blockquote>
<p>Peinlich peinlich <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1304992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304992</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 16:52:45 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Meine gängige/gebräuchlische Lösung interessiert wohl niemanden ...</p>
</blockquote>
<p>Klar, immer her damit. <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="😉"
    /><br />
Edit: Das ist keine Lösung, nur ein Fragment <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/1304993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304993</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 16:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 15:41:08 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Würde folgendes funktionnieren?</p>
<pre><code class="language-cpp">int main(){
    double d=0;
    do(){
        while(!(cin&gt;&gt;d)){
            cin.clear();
            cin.ignore(32000,'\n); //wie war das mit den numeric_limits&lt;stream_buf&gt;() nochmal? Ka wie das richtig war...
        }
    }while(d&lt;10);
</code></pre>
</blockquote>
<pre><code class="language-cpp">std::cin.ignore( std::numeric_limits&lt; std::streamsize &gt;::max(), '\n' );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305003</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Wed, 13 Jun 2007 16:49:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{

	double dMasse;
	string eingabe;
	char *err_ptr = NULL;

	do
	{
		err_ptr = NULL;
		cout &lt;&lt; &quot;Bitte geben sie die Masse ein( Werte 0 bis 10 ):  &quot; &lt;&lt; endl; 
        cin &gt;&gt; eingabe;
		dMasse = strtod( eingabe.c_str(), &amp;err_ptr );
	}
	while (  *err_ptr != '\0' || ( dMasse &lt; 0 || dMasse &gt; 10 ) );

	cout &lt;&lt; &quot;Sie haben bombensicher einen Wert zwischen 0 und 10 &quot;
		&quot;eingegeben: &quot; &lt;&lt; dMasse &lt;&lt; endl;

   return 0;
}
</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/1305048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305048</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 13 Jun 2007 16:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 09:02:25 GMT]]></title><description><![CDATA[<p>Aus euren sehr guten Vorschlägen habe ich jetzt zwei Versionen ausgewählt, die einwandfrei laufen, besonderen Dank an proggingmania und KasF:<br />
Hab sie noch etwas vervollständigt.</p>
<p>proggingmania:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;string&gt; 
using namespace std; 

// funktioniert  

int main() 

{ 

    double MASSE; 
    string eingabe; 
    char *err_ptr = NULL; 

    do 
    { 
        err_ptr = NULL; 
        cout &lt;&lt; &quot;Bitte geben sie die Masse ein (Wert &gt;= 10):  &quot; &lt;&lt; endl; 
        cin &gt;&gt; eingabe; 
        MASSE = strtod( eingabe.c_str(), &amp;err_ptr ); 
    } 
    while (  *err_ptr != '\0' || ( MASSE &lt; 10) ); 

    cout &lt;&lt; &quot;Sie haben bombensicher einen Wert &gt;= 10 &quot; 
        &quot;eingegeben: &quot; &lt;&lt; MASSE &lt;&lt; endl; 

   return 0; 
}
</code></pre>
<p>KasF:</p>
<pre><code>// funktioniert

#include &lt;iostream&gt; 
#include &lt;string&gt; 
using namespace std; 

int main ()
{

  double MASSE;

while ( true )
{
cout &lt;&lt; &quot;Bitte geben sie die Masse ein:  &quot; &lt;&lt; endl; 
cin &gt;&gt; MASSE; 
if(cin.fail()) // fail() = input/output Fehler, zB bei char in int eingelesen 
{ 
    cout &lt;&lt; &quot;Eingabe einer Zahl &gt;= 10 erforderlich!&quot; &lt;&lt; endl; 
    cin.clear();
    fflush (stdin);
    continue;
}   

if ( MASSE &lt; 10 ) cout &lt;&lt; &quot;Masse zu klein!&quot; &lt;&lt; endl;
if ( MASSE &gt;= 10 ) cout &lt;&lt; &quot;Eingabe akzeptiert!&quot; &lt;&lt; endl;
if ( MASSE &gt;= 10 ) break;

}
cout &lt;&lt; &quot;Masse = &quot; &lt;&lt; MASSE &lt;&lt; endl;
return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305445</guid><dc:creator><![CDATA[Matop]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 10:43:50 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">fflush (stdin);
</code></pre>
</blockquote>
<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="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305550</guid><dc:creator><![CDATA[T1m]]></dc:creator><pubDate>Thu, 14 Jun 2007 10:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 15:40:57 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Würde folgendes funktionnieren?</p>
<pre><code class="language-cpp">int main(){
    double d=0.0;
    do{
        while(!(cin&gt;&gt;d)){
            cin.clear();
            cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n'); //danke an David_pb (siehe unten)
        }
    }while(d&gt;0.0 &amp;&amp; d&lt;10.0);
</code></pre>
</blockquote>
<p>Jetzt muss ich mich doch mal selbst zitieren: warum ist diese (für mich pers. einfacherer Variante) nicht praktikabel? (Frage zum eigenen Verständnis)</p>
<p>EDIT: nochn Syntaxfehler drin gehabt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305576</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Thu, 14 Jun 2007 15:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 11:41:13 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Jetzt muss ich mich doch mal selbst zitieren: warum ist diese (für mich pers. einfacherer Variante) nicht praktikabel? (Frage zum eigenen Verständnis)</p>
</blockquote>
<p>frag ich mich auch :p.</p>
<p>wahrscheinlich ist es einfach schöner, zuerst ne endlosschleife zu programmieren und dann mit break rauszuspringen, anstatt ne anständige abbruchbedingung zu nutzen <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="🙄"
    />.</p>
<p>Vielleicht will man auch unbedingt nen c++ stream mit c mitteln clearen, um damit je nach standardbibliothek fast unmöglich zu findende fehler zu produzieren ;).</p>
<p>Vielleicht liegts auch einfach an dem Syntaxfehler. Hinter do kommen keine &quot;()&quot;.</p>
<p>so funktionierts bei mir perfekt:</p>
<pre><code class="language-cpp">double d=0.0;
do
{
    cout&lt;&lt;&quot;Bitte geben sie eine Zahl &gt;10 ein: &quot;;
    while(!(cin&gt;&gt;d))
    {
        cin.clear();
        cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
        cout&lt;&lt;&quot;\nFehlerhafte eingabe! Bitte geben sie eine Zahl &gt;10 ein: &quot;;
    }
}
while(d&lt;10.0);
cout&lt;&lt;&quot;eingabe:&quot;&lt;&lt;d;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305597</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 11:56:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">double d=0.0;
do
{
    cout&lt;&lt;&quot;Bitte geben sie eine Zahl &gt;10 ein: &quot;;
    while(!(cin&gt;&gt;d))
    {
        cin.clear();
        cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');
        cout&lt;&lt;&quot;\nFehlerhafte eingabe! Bitte geben sie eine Zahl &gt;10 ein: &quot;;
    }
}
while(d&lt;10.0);
cout&lt;&lt;&quot;eingabe:&quot;&lt;&lt;d;
</code></pre>
<p>Mit welchen Header-Dateien?<br />
Nicht jeder ist ein solcher Crack wie du! <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="😉"
    /><br />
schreib doch mal nen vollständigen code<br />
max() ist unbekannt...<br />
wenn ihr einfach nen vollständigen code schreiben würdet, könnten sich die nicht-profis auch mitunterhalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305623</guid><dc:creator><![CDATA[Matop]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 12:04:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include&lt;limits&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305634</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 14 Jun 2007 12:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 12:09:35 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>...<br />
Jetzt muss ich mich doch mal selbst zitieren: warum ist diese (für mich pers. einfacherer Variante) nicht praktikabel? (Frage zum eigenen Verständnis)<br />
...</p>
</blockquote>
<ol>
<li>Weil sie fehlerhaft ist und sich nicht kompilieren lässt.</li>
<li>Als C++ Einsteiger weiß man nicht, das man für:<br />
cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');<br />
eine extra Headerdatei einbinden muss.</li>
</ol>
<p>Daher nimmt man einfach die Lösung, wo man die Fehler zunächst intuitiv schneller beseitigen kann, oder am besten erst gar keine vorhanden sind.</p>
<p>Wenn man nun die von otze verbesserte Version dahernimmt und &lt;limits&gt; mit einbindet, funktioniert das in der Tat einwandfrei.<br />
Darum gefällt mir persönlich diese Version auch am besten, weil sie im Gegensatz zu meiner ohne die Fehlerprüfung über strtod auskommt. <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="😉"
    /><br />
Gruß, p.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305642</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Thu, 14 Jun 2007 12:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 12:18:34 GMT]]></title><description><![CDATA[<p>Matop schrieb:</p>
<blockquote>
<p>Mit welchen Header-Dateien?<br />
Nicht jeder ist ein solcher Crack wie du! <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="😉"
    /><br />
schreib doch mal nen vollständigen code<br />
max() ist unbekannt...<br />
wenn ihr einfach nen vollständigen code schreiben würdet, könnten sich die nicht-profis auch mitunterhalten</p>
</blockquote>
<p>google ist dein Freund :D. erster treffer numeric_limits: <a href="http://www.cpp-tutor.de/cpp/le13/le13_03.htm" rel="nofollow">http://www.cpp-tutor.de/cpp/le13/le13_03.htm</a>. Und schon kannst du wieder mitreden.<br />
Du kannst immer davon ausgehen, dass alles was hier gesagt wird,standard c++ ist(ausser, es wird ausdrücklich gesagt, dass man fremdcode wie boost nutzt). Dann reicht googlen nach dem unbekannten wort,zb &quot;c++ numeric_limits&quot;, und man weis wieder worum es geht(wenn man nicht weis, was ein code macht ist es eh nicht sinnvoll ihn einfach zu kopieren. Das ist viel zu fehleranfällig und man ist aufgeschmissen, wenn man was ändern will, also muss man im zweifelsfall eh googlen <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>header wurde ja jetzt genannt, läuft mit iostream und limits</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305655</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 14 Jun 2007 12:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to cin seltsames Verhalten in while-Schleife mit Plausibilitätsprüfung on Thu, 14 Jun 2007 13:21:03 GMT]]></title><description><![CDATA[<p>Stellt sich mir gerade die Frage, ob man auf die Zeile:<br />
cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');<br />
ganz verzichten kann.</p>
<p>Ich denke mal, die obige Zeile kann man rausschmeissen.<br />
Dann müsste man noch prüfen, ob korrekt konvertiert wurde.<br />
Grund:<br />
Wenn zu viele Zeichen eingegeben werden, dann wird die while-Schleife beendet und in der Variable d steht #inf.</p>
<p>Ich darf an dieser Stelle in aller Bescheidenheit darauf hinweisen, das diese Gegebenheit bei meiner Version abgefangen wird! <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/1305713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305713</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Thu, 14 Jun 2007 13:21:03 GMT</pubDate></item></channel></rss>