<?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[Stromeingabe überprüfen.]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich versuche eine Methode zu entwickeln, welches überprüft, ob die Eingabe korrekt ist. Also keine Buchstaben bei Zahlen oder so.</p>
<p>Gedacht habe ich mir sowas wie:</p>
<pre><code>if(!cin{
   //Fehler
}
</code></pre>
<p>Das hat immer funktioniert, wenn bei unsigned int eine negative Zahl eingegeben wurde, oder ein Buchstabe oder umgekehrt. War ganz zuverlässig.<br />
Aber da ich es an vielen Stellen brauche, wollte ich das in eine Methode verpacken:</p>
<pre><code>checkInput(std::istream in){

 if(!cin{
   //Fehler
 }
}
</code></pre>
<p>&quot;istream&quot; macht komischeweise keinen Unterschied mehr zwischen unsigned und signed typen.<br />
Dann möchte ich auch prüfen, ob irgendwelche zahlen vorkommen mit std::isdigit<br />
dafür schreibe (auch in dieser Methode)</p>
<pre><code>string wert;
stringstream ss;
ss &lt;&lt; in;
ss &gt;&gt; wert;
isDigit(wert[0)
</code></pre>
<p>Aber der stringstream erhält von dem istream auch irgendein blödsinn.<br />
Hat da jemand einen guten Ansatz wo ich einfach beim Aufruf schreiben kann sowas wie :</p>
<pre><code>cin &gt;&gt; eingabe;
checkInput(cin);
</code></pre>
<p>Danke für jeden Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330335/stromeingabe-überprüfen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 11:35:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330335.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jan 2015 16:24:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 16:24:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich versuche eine Methode zu entwickeln, welches überprüft, ob die Eingabe korrekt ist. Also keine Buchstaben bei Zahlen oder so.</p>
<p>Gedacht habe ich mir sowas wie:</p>
<pre><code>if(!cin{
   //Fehler
}
</code></pre>
<p>Das hat immer funktioniert, wenn bei unsigned int eine negative Zahl eingegeben wurde, oder ein Buchstabe oder umgekehrt. War ganz zuverlässig.<br />
Aber da ich es an vielen Stellen brauche, wollte ich das in eine Methode verpacken:</p>
<pre><code>checkInput(std::istream in){

 if(!cin{
   //Fehler
 }
}
</code></pre>
<p>&quot;istream&quot; macht komischeweise keinen Unterschied mehr zwischen unsigned und signed typen.<br />
Dann möchte ich auch prüfen, ob irgendwelche zahlen vorkommen mit std::isdigit<br />
dafür schreibe (auch in dieser Methode)</p>
<pre><code>string wert;
stringstream ss;
ss &lt;&lt; in;
ss &gt;&gt; wert;
isDigit(wert[0)
</code></pre>
<p>Aber der stringstream erhält von dem istream auch irgendein blödsinn.<br />
Hat da jemand einen guten Ansatz wo ich einfach beim Aufruf schreiben kann sowas wie :</p>
<pre><code>cin &gt;&gt; eingabe;
checkInput(cin);
</code></pre>
<p>Danke für jeden Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436079</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Mon, 05 Jan 2015 16:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 16:48:41 GMT]]></title><description><![CDATA[<p>Korrigiere mal Deine Tippfehler. Sonst wird es schwierig vernünftig zu antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436082</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 05 Jan 2015 16:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 16:49:03 GMT]]></title><description><![CDATA[<p>Tambler schrieb:</p>
<blockquote>
<p>Das hat immer funktioniert, wenn bei unsigned int eine negative Zahl eingegeben wurde, oder ein Buchstabe oder umgekehrt. War ganz zuverlässig.</p>
</blockquote>
<p>Glaub ich nicht.</p>
<p>Tambler schrieb:</p>
<blockquote>
<p>Aber da ich es an vielen Stellen brauche, wollte ich das in eine Methode verpacken:</p>
</blockquote>
<pre><code class="language-cpp">unsigned read_unsigend(std::istream&amp; in=std::cin) {
  long long n;
  if (!(in &gt;&gt; n) || n&lt;0 || n&gt;std::numeric_limits&lt;unsigned&gt;::max())
    // Fehler
  return n;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2436083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436083</guid><dc:creator><![CDATA[stromer]]></dc:creator><pubDate>Mon, 05 Jan 2015 16:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 17:03:39 GMT]]></title><description><![CDATA[<p>Tambler schrieb:</p>
<blockquote>
<p>Hallo zusammen,<br />
ich versuche eine Methode zu entwickeln, welches überprüft, ob die Eingabe korrekt ist. Also keine Buchstaben bei Zahlen oder so.</p>
<p>Gedacht habe ich mir sowas wie:</p>
<pre><code>if(!cin{
   //Fehler
}
</code></pre>
<p>Das hat immer funktioniert, wenn bei unsigned int eine negative Zahl eingegeben wurde, oder ein Buchstabe oder umgekehrt.</p>
</blockquote>
<p>Aus der Sicht des Streams sind negative Zahlen keine Fehler, deine if funktiniert also nicht. unsigend Unter- und Überläufe sind wohldefiniert. Bei signed Unter- und Überläufe kommt hoffentlich einfach nur Schrott raus, weil sie nicht wohldefiniert sind.</p>
<p>Wenn du allerdings einen Buchstaben in den Stream stopfst anstatt eine Zahl (wenn ein int erwartet wird), sollte deine if korrekt funktionieren.</p>
<p>Wenn ein Buchstabe erwartet wird und du dem Stream eine Zahl gibst, funktioniert deine if nicht, weil du eigentlich keine Zahl (z.B. 9) eigegeben hast, sondern ein char ('9').</p>
<p>Tambler schrieb:</p>
<blockquote>
<pre><code>checkInput(std::istream in){ // call-by-reference nicht vergessen, du willst ja den originalen Stream.

 if(!cin{
   //Fehler
 }
}
</code></pre>
</blockquote>
<p>Es gibt ja verschiedene Möglichkeiten, wieso es zu einem Fehler kam. Wenn du das in eine Funktion auslagerst, würdest du ja alle Fehler gleich behandeln. Außerdem erwarte ich bei einer &quot;check&quot; Funktion einen Rückgabewert... Diesen müsstest du dann in der aufrufenden Funktion logischerweise testen, hast also wieder eine if. Was hast du durch die Funktion dann gewonnen?</p>
<p>Tambler schrieb:</p>
<blockquote>
<p>Dann möchte ich auch prüfen, ob irgendwelche zahlen vorkommen mit std::isdigit<br />
dafür schreibe (auch in dieser Methode)</p>
<pre><code>string wert;
stringstream ss;
ss &lt;&lt; in;
ss &gt;&gt; wert;
isDigit(wert[0)
</code></pre>
<p>Aber der stringstream erhält von dem istream auch irgendein blödsinn.<br />
Hat da jemand einen guten Ansatz wo ich einfach beim Aufruf schreiben kann sowas wie :</p>
<pre><code>cin &gt;&gt; eingabe;
checkInput(cin);
</code></pre>
</blockquote>
<p>Wenn du den Inhalt eines Stream kopieren willst, nimmst du istream::rdbuf(). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> oss &lt;&lt; in.rdbuf(). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Außerdem nimmst du ostringstream und nicht stringstream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436086</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 05 Jan 2015 17:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 19:07:56 GMT]]></title><description><![CDATA[<p>Vielen Dank.<br />
Habe noch mal das ganze getestet und das deckt sich mit euren Aussagen.</p>
<p>Der Code:</p>
<pre><code>unsigned read_unsigend(std::istream&amp; in=std::cin) { 
  long long n; 
  if (!(in &gt;&gt; n) || n&lt;0 || n&gt;std::numeric_limits&lt;unsigned&gt;::max()) 
    // Fehler 
  return n; 
}
</code></pre>
<p>Behebt mein Problem nicht.<br />
Ich gebe bereits von Außen einen Wert ein.<br />
Bei der ersten Bedienung in der if muss ich aber erneut was eingeben....<br />
Was sich kein Problem ist, man könnte das ja auch rausnehmen.</p>
<p>Das Problem ist, ich kriege aus dem Arguement &quot;in&quot; keinen vernünftigen Wert heraus, welches ich dann checken kann. Stringstream, oder std::getline funktionieren nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436105</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Mon, 05 Jan 2015 19:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 19:30:33 GMT]]></title><description><![CDATA[<p>Du willst also eine Funktion, die überprüft, ob eine beliebige Input Operation erfolgreich war (also einen brauchbaren Wert liefert)? Vielleicht können die Templatekünstler da was basteln ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436107</guid><dc:creator><![CDATA[hardware]]></dc:creator><pubDate>Mon, 05 Jan 2015 19:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 20:38:56 GMT]]></title><description><![CDATA[<p>ja ich habe mir eben noch ne template-funktion gebastelt:</p>
<pre><code>bool checkType(T obj, string condition) {

    bool check(false);
    if (typeid (obj).name() == condition) {
        check = true;
    }

    check;
}
</code></pre>
<p>Aber irgendwie sehe ich bis jetzt keinen Sinn darin, denn wenn ich sie aufrufe:</p>
<pre><code>int name;
cin &gt;&gt; name
checkType(name, &quot;int&quot;);
</code></pre>
<p>Schauet er sich dann den type an, welche dann ein int ist und sagt: &quot;ja es ist int&quot; aber dass im Inhalt Buchstaben vorkommen, bleibt dabei ungeprüft...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436115</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Mon, 05 Jan 2015 20:38:56 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 21:12:43 GMT]]></title><description><![CDATA[<p>Natürlich, dein Code ist Schwachsinn. Er prüft ob der Typ von int int ist*.<br />
Was genau spricht gegen:</p>
<pre><code>int i;
in &gt;&gt; i;
if (!in) // Buchstabe wurde eingegeben
 ups();
</code></pre>
<p>*Technisch gesehen nur, ob das implementation-defined Ergebnis von std::type_info::name() gleich einem String ist. Das ist sowas von nicht portabel. Und da fehlt ein return in der Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436117</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 05 Jan 2015 21:12:43 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 21:49:48 GMT]]></title><description><![CDATA[<p>Tambler schrieb:</p>
<blockquote>
<p>Aber irgendwie sehe ich bis jetzt keinen Sinn</p>
</blockquote>
<p>Macht auch überhaupt keinen Sinn, was du gemacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436120</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Mon, 05 Jan 2015 21:49:48 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 22:08:46 GMT]]></title><description><![CDATA[<p>Das Probem ist, dass das Argument std::istream, den ich in meiner Methode verwende.<br />
Die Vorgehensweise:</p>
<pre><code>std::istream in;
if(!in)
{

}
</code></pre>
<p>funktioniert nicht in allen Fällen.<br />
Deswegen benötige ich den exakten Wert vom &quot;std::istream&quot; um ihn auf weitere Fehler zu prüfen.<br />
Seltsameweise kann ich weder mit stringsteam oder mit std::getline keinen brauchbaren Werten aus dem Argument std::istream herauslesen.<br />
Das ist das Problem <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/2436122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436122</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Mon, 05 Jan 2015 22:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 22:16:00 GMT]]></title><description><![CDATA[<p>Wenn du eigene, ganz spezielle Anforderungen an die Extraktionsfunktionen hast, dann schreib eine eigene, spezielle Extraktionsfunktion, anstatt zu versuchen, das Verhalten der Standardfunktionen irgendwie zu korrigieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436127</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Jan 2015 22:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 22:18:20 GMT]]></title><description><![CDATA[<p>In was für Fällen gehts denn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436128</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 05 Jan 2015 22:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Stromeingabe überprüfen. on Mon, 05 Jan 2015 22:50:41 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>In was für Fällen gehts denn nicht?</p>
</blockquote>
<p>Er will halt, dass</p>
<pre><code>uint32_t u;
cin &gt;&gt; u;
</code></pre>
<p>für Eingaben der folgenden Art einen Fehler auslöst:</p>
<pre><code>-1
1a
999999999999999
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2436136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436136</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Jan 2015 22:50:41 GMT</pubDate></item></channel></rss>