<?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[Überprüfung]]></title><description><![CDATA[<p>Wie kann man überprüfen wenn man ein Integer wert erwartet auch einen bekommt und wenn man keinen Integer wert bekommt das mit einer Fehlermeldung abfängt und nicht das ganze Programm beendet. Eine Vorstellung habe ich schon doch es klappt noch nicht.</p>
<pre><code class="language-cpp">while (cin &gt;&gt; c &gt;&gt; d){
		if(!(cin &gt;&gt; c &gt;&gt; d)) 
			error(&quot;Please put an integer \n&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/279364/überprüfung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 14:21:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279364.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Dec 2010 19:04:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 19:04:18 GMT]]></title><description><![CDATA[<p>Wie kann man überprüfen wenn man ein Integer wert erwartet auch einen bekommt und wenn man keinen Integer wert bekommt das mit einer Fehlermeldung abfängt und nicht das ganze Programm beendet. Eine Vorstellung habe ich schon doch es klappt noch nicht.</p>
<pre><code class="language-cpp">while (cin &gt;&gt; c &gt;&gt; d){
		if(!(cin &gt;&gt; c &gt;&gt; d)) 
			error(&quot;Please put an integer \n&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998674</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Fri, 24 Dec 2010 19:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 20:12:08 GMT]]></title><description><![CDATA[<p>Häää was soll'n das sein? Und wie &quot;Integerwert&quot;? Du meinst Ganzzahlen? Würde einfach so ne Art machen:</p>
<pre><code class="language-cpp">do
{
    c = getc();
} while(c &gt; ASCII-Zahlen-Anfang &amp;&amp; c &lt; ASCII-Zahlen-Ende);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998680</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Fri, 24 Dec 2010 20:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 20:24:12 GMT]]></title><description><![CDATA[<p>Ich meine es soll ganz zahlen rein, und wenn man einen string oder double eingibt soll es eine Fehlermeldung ausgeben und das Programm soll sich nicht selber beenden.<br />
So etwas:</p>
<pre><code class="language-cpp">int c,d;
cin &gt;&gt; c &gt;&gt; d;
if (int != c || int != d) error(&quot;Das ist kein Integer&quot;);
</code></pre>
<p>Ich weiß das der Code falsch ist nur so kann ich sagen was ich meine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998684</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Fri, 24 Dec 2010 20:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 20:32:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
	char TempBuffer = '\0';
	std::string Buffer;

	do
	{
		if(TempBuffer != '\0')
			Buffer.push_back(TempBuffer);

		TempBuffer = getc(stdin);

	} while(TempBuffer &gt; 48 &amp;&amp; TempBuffer &lt; 57);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998685</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Fri, 24 Dec 2010 20:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 20:47:37 GMT]]></title><description><![CDATA[<pre><code>while(TempBuffer &gt; 48 &amp;&amp; TempBuffer &lt; 57);
</code></pre>
<p>kannst du das erklären ? <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/1998687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998687</guid><dc:creator><![CDATA[Conflict]]></dc:creator><pubDate>Fri, 24 Dec 2010 20:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 20:51:05 GMT]]></title><description><![CDATA[<p>Jetzt ist mir eins klar als ich das Buch (Einführung in die Programmierung mit C++) durchblättere. Man kann das mit dem Fehler abfangen nur vor der schleife machen als nicht in der schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998688</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Fri, 24 Dec 2010 20:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Fri, 24 Dec 2010 22:18:46 GMT]]></title><description><![CDATA[<p>Ungetestet ungefähr so:</p>
<pre><code class="language-cpp">while(!(cin&gt;&gt;i))
{
 cin.clear();
 // Fehlermeldung anzeigen;
 cin.ignore(/*eines oder alle Zeichen*/);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998712</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Dec 2010 22:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sat, 25 Dec 2010 18:40:11 GMT]]></title><description><![CDATA[<p>Ich habe es so geschrieben:</p>
<pre><code class="language-cpp">int c,d;
while (!(cin&gt;&gt;c || cin&gt;&gt;d)){
	 cin.clear(); 
             error (&quot;Please put an integer \n&quot;);
	 cin.ignore('!');
}
</code></pre>
<p>Da es zwei Integer überprüfen soll. Doch irgendwie will das nicht. Wenn ich ein Double eingebe beendet sich das Programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998836</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Sat, 25 Dec 2010 18:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sat, 25 Dec 2010 18:57:01 GMT]]></title><description><![CDATA[<p>Ich mach das eigentlich immer so, in diesem Fall zb. bei einem simplen Taschenrechner:</p>
<pre><code class="language-cpp">#include &lt;conio.h&gt;
//...
int a, b;
char token;
cout &lt;&lt; &quot;Gebe einen Term ein: (zb 2+6) &quot;;
if(!(cin &gt;&gt; a)) {
    cerr &lt;&lt; &quot;Fehler bei der Eingabe!\n&quot;;
    _getch();
    return -1;
}
cin &gt;&gt; token;
if(!(cin &gt;&gt; b)) {
    cerr &lt;&lt; &quot;Fehler bei der Eingabe!\n&quot;;
    _getch();
    return -1;
}
cout &lt;&lt; a &lt;&lt; token &lt;&lt; b;
//usw.
</code></pre>
<p>Nur beendet sich da das Prog, die Variante mit cin.ignore() hat bei mir nie geklappt. Was ist daran denn auch so schlimm? Mich stört das eigentlich nicht.<br />
Würde mich aber auch interessieren ob hier endlich mal eine funktionierende Lösung gepostet 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/1998840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998840</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sat, 25 Dec 2010 18:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sat, 25 Dec 2010 19:45:45 GMT]]></title><description><![CDATA[<p>winux schrieb:</p>
<blockquote>
<p>Ich habe es so geschrieben:</p>
<pre><code class="language-cpp">int c,d;
while (!(cin&gt;&gt;c || cin&gt;&gt;d)){
	 cin.clear(); 
             error (&quot;Please put an integer \n&quot;);
	 cin.ignore('!');
}
</code></pre>
<p>Da es zwei Integer überprüfen soll. Doch irgendwie will das nicht. Wenn ich ein Double eingebe beendet sich das Programm.</p>
</blockquote>
<p>Kleines Fallbeispiel - du gibst folgendes ein: 3 4.23<br />
Resultat: alles ok - c hat den Wert 3 und d hat den Wert 4</p>
<p>Anderes Beispiel - Eingabe: 3 .3f<br />
Resultat: c hat den Wert 3 aber d konnte nicht eingelesen werden. Da du aber geschrieben hast while (!(cin&gt;&gt;c || cin&gt;&gt;d)) wird die while-Schleife abgebrochen. Warum? cin&gt;&gt;c wird als wahr ausgewertet. Bei einem logischen Oder reicht es wenn einer der Operanden wahr ist um den Ausdruck als wahr auszuwerten. Demzufolge ist (cin&gt;&gt;c || cin&gt;&gt;d) nun also wahr. Du negierst das ganze dann noch --&gt; es wird false. Somit wird die while-Schleife nicht durchlaufen.</p>
<p>Was du möchtest ist etwas in der Art (wie SeppJ ja bereits zeigte):</p>
<pre><code class="language-cpp">int a,b;
while (!(std::cin&gt;&gt;a&gt;&gt;b)) {
	std::cout&lt;&lt;&quot;\nFehler - bitte neu eingeben\n&quot;;
	std::cin.clear();
	std::cin.ignore(std::cin.rdbuf()-&gt;in_avail());
}
</code></pre>
<p>wobei ich meine mich erinnern zu können, dass SeppJ mal erwähnte, man soll sich nicht auf das letzte statement verlassen. Müsste ich mir nochmal genauer ansehen warum und wie etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998845</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sat, 25 Dec 2010 19:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sat, 25 Dec 2010 21:24:09 GMT]]></title><description><![CDATA[<p>Wenn ich bei mir allerdings diese Variante laufen lasse, also das hier:</p>
<pre><code class="language-cpp">int a,b;
while (!(std::cin&gt;&gt;a&gt;&gt;b)) {
    std::cout&lt;&lt;&quot;\nFehler - bitte neu eingeben\n&quot;;
    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()-&gt;in_avail());
}
</code></pre>
<p>Und ich was falsches eingebe (zb einen Buchstaben), dann erscheint eine Endlosschleife mit &quot;\nFehler - bitte neu eingeben\n&quot;..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998855</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sat, 25 Dec 2010 21:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 00:11:01 GMT]]></title><description><![CDATA[<p>Siehe <a href="http://www.c-plusplus.net/forum/35473" rel="nofollow">http://www.c-plusplus.net/forum/35473</a>. Dort wird auch eine Lösung präsentiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998871</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sun, 26 Dec 2010 00:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 10:29:53 GMT]]></title><description><![CDATA[<p>Ahh so hats geklappt, aber eine Frage hab ich noch. Ich hab mir jetzt eben schnell was hingeschmiert:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
    //..code
    if(!cin) {
        cerr &lt;&lt; &quot;Fehler bei der Eingabe! Nochmal eingeben!\n&quot;;
        cin.clear();
        cin.ignore(numeric_limits&lt;int&gt;::max(), '\n');
        continue;
    }
</code></pre>
<p>Aber was machen diese beiden Zeilen hier?</p>
<pre><code>cin.clear();
cin.ignore(numeric_limits&lt;int&gt;::max(), '\n');
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998915</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 26 Dec 2010 10:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 11:50:10 GMT]]></title><description><![CDATA[<p>jetzt wäre doch der perfekte Zeitpunkt, sich mit der Doku zu beschäftigen, oder?</p>
<p>clear:<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/clear/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/clear/</a></p>
<p>ignore:<br />
<a href="http://www.cplusplus.com/reference/iostream/istream/ignore/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/ignore/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998937</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 26 Dec 2010 11:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 14:51:04 GMT]]></title><description><![CDATA[<p>Das ist der Code mit dem ich Arbeite.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;std_lib_facilities.h&quot;

void rand_in_range(int a,int b){
     cout &lt;&lt; randint(a - b) + b &lt;&lt; endl;
}

void calc(){
	cout &lt;&lt; &quot;Please enter 2 integer to generate a number\n&quot;;
	cout &lt;&lt; &quot;To exit enter any char\n&quot;;
    int c,d;
	while (cin &gt;&gt; c &gt;&gt; d){
        if (!(cin)){
		cout &lt;&lt; &quot;Error in the Input! Re-enter!\n&quot;; 
        cin.clear(); 
        cin.ignore(numeric_limits&lt;int&gt;::max(), '\n'); 
        continue;} 
		else{
		rand_in_range(c,d);}
        }
}

int main()
try{
	calc();

	keep_window_open();
    return 0;
}
catch (runtime_error e) {	
	cout &lt;&lt; e.what() &lt;&lt; '\n';
	keep_window_open(&quot;~&quot;);	
}
catch (...) {	
	cout &lt;&lt; &quot;exiting\n&quot;;
	keep_window_open(&quot;~&quot;);	
}
</code></pre>
<p>Doch wenn ich einen Buchstaben oder Double eingebe beendet sich das Programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998983</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Sun, 26 Dec 2010 14:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 14:52:23 GMT]]></title><description><![CDATA[<p>winux schrieb:</p>
<blockquote>
<p>Das ist der Code mit dem ich Arbeite.</p>
<pre><code class="language-cpp">//..snip..
    int c,d;
	while (cin &gt;&gt; c &gt;&gt; d){        // &lt;-------- 1
        if (!(cin)){              // &lt;-------- 2
		cout &lt;&lt; &quot;Error in the Input! Re-enter!\n&quot;; 
        cin.clear(); 
        cin.ignore(numeric_limits&lt;int&gt;::max(), '\n'); 
        continue;} 
		else
		rand_in_range(c,d);
        }
//..snap..
</code></pre>
<p>Doch wenn ich einen Buchstaben oder Double eingebe beendet sich das Programm.</p>
</blockquote>
<p>zu 1.) Nur wenn die Bedingung wahr ist - wird die Schleife durchlaufen, und zwar solange sie wahr ist. Der Operator &gt;&gt; mit einem stream als linksseitigem Operanden liefert eine Referenz dieses Streams zurück. Der Stream verwaltet intern Zustandsflags die angeben, in welchem Zustand sich der stream befindet. Wenn alles ok ist ist dieser Wert 0 was dem goodbit entspricht. Soll ein int eingelesen werden aber du lieferst beispielsweise einen Buchstaben, so wird das failbit gesetzt.<br />
Testest du nun den stream in einer Bedingung auf einen Wahrheitswert wird überprüft, welche flags gesetzt sind. Wenn der stream in Ordnung ist (goodbit) wird true geliefert, anderenfalls false.</p>
<p>Lange Rede kurzer Sinn: Wenn du while (cin&gt;&gt;c&gt;&gt;d) schreibst und beispielsweise einen Buchstaben eingibst, wird das failbit gesetzt, vom operator&gt;&gt; per return-by-reference der stream zurückgegeben, dieser dann auf Wahrheitswert getestet und dieser liefert dann aufgrund des gesetzten failbits den Wert false.<br />
Resultat: die while-Schleife wird nicht durchlaufen und somit auch nicht deine zweite Zeile (2) if(!(cin)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998996</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sun, 26 Dec 2010 14:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Überprüfung on Sun, 26 Dec 2010 17:57:34 GMT]]></title><description><![CDATA[<p>OK jetzt hab ich wieder etwas gelernt. Also muss man das schon vor der schleife abfangen. Danke an alle für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999004</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Sun, 26 Dec 2010 17:57:34 GMT</pubDate></item></channel></rss>