<?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[Verhalten bei bei Schleifenverarbeitung]]></title><description><![CDATA[<p>Hallo,</p>
<p>zu Übungszwecken habe ich etwas mit den verschiedenen Schleifenarten herumgespielt. Dabei kam z.B. folgender Code heraus:</p>
<p>(Zur Übersicht für mich sind ein paar extra Leerzeilen mit drin)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

int main ()
{

    bool durchlauf;
    int ergebnis = 1;

    do
    {
        int multiplikator;
        cout &lt;&lt; &quot;x = &quot; &lt;&lt; ergebnis &lt;&lt; '\n';
        cout &lt;&lt; &quot;Geben Sie einen Multiplikator &gt; 0 ein.\n&quot;;

                if (!(cin &gt;&gt; multiplikator))
                {
                    cout &lt;&lt; &quot;Eingabefehler - keine Zahl\n&quot;;
                    exit(1);
                }

                else if (!multiplikator)
                {
                    durchlauf = false;
                }

                else
                {
                    ergebnis*=multiplikator;
                    durchlauf = true;
                }

    } while (durchlauf);

    return 0;
}
</code></pre>
<p>Die Ausführung läuft soweit korrekt, bis auf eine Ausnahme. Wenn ich als Multiplikator eine Gleitkommazahl eingebe, z.B. 4.1, dann wird die Berechnung mit 4 als Multiplikator ausgeführt, was soweit ja auch korrekt ist, allerdings lauft das Programm dann weiter und in die erste Schleife hinein.</p>
<p>Ich verstehe nicht ganz, wieso das so ist. Wenn ich eine Gleitkommazahl einem int zuweise, dann sollte doch eigentlich alles nach dem Komma (und inklusive des Kommas) ignoriert werden, zumindest nach den Erklärungen, die ich bisher gelesen habe.</p>
<p>Kann mir dazu jemand einen Tip geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261594/verhalten-bei-bei-schleifenverarbeitung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 03:42:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261594.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Feb 2010 22:08:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Sat, 20 Feb 2010 22:08:14 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zu Übungszwecken habe ich etwas mit den verschiedenen Schleifenarten herumgespielt. Dabei kam z.B. folgender Code heraus:</p>
<p>(Zur Übersicht für mich sind ein paar extra Leerzeilen mit drin)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

int main ()
{

    bool durchlauf;
    int ergebnis = 1;

    do
    {
        int multiplikator;
        cout &lt;&lt; &quot;x = &quot; &lt;&lt; ergebnis &lt;&lt; '\n';
        cout &lt;&lt; &quot;Geben Sie einen Multiplikator &gt; 0 ein.\n&quot;;

                if (!(cin &gt;&gt; multiplikator))
                {
                    cout &lt;&lt; &quot;Eingabefehler - keine Zahl\n&quot;;
                    exit(1);
                }

                else if (!multiplikator)
                {
                    durchlauf = false;
                }

                else
                {
                    ergebnis*=multiplikator;
                    durchlauf = true;
                }

    } while (durchlauf);

    return 0;
}
</code></pre>
<p>Die Ausführung läuft soweit korrekt, bis auf eine Ausnahme. Wenn ich als Multiplikator eine Gleitkommazahl eingebe, z.B. 4.1, dann wird die Berechnung mit 4 als Multiplikator ausgeführt, was soweit ja auch korrekt ist, allerdings lauft das Programm dann weiter und in die erste Schleife hinein.</p>
<p>Ich verstehe nicht ganz, wieso das so ist. Wenn ich eine Gleitkommazahl einem int zuweise, dann sollte doch eigentlich alles nach dem Komma (und inklusive des Kommas) ignoriert werden, zumindest nach den Erklärungen, die ich bisher gelesen habe.</p>
<p>Kann mir dazu jemand einen Tip geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858891</guid><dc:creator><![CDATA[Capet]]></dc:creator><pubDate>Sat, 20 Feb 2010 22:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Sat, 20 Feb 2010 22:19:16 GMT]]></title><description><![CDATA[<p>Capet schrieb:</p>
<blockquote>
<p>Ich verstehe nicht ganz, wieso das so ist. Wenn ich eine Gleitkommazahl einem int zuweise, dann sollte doch eigentlich alles nach dem Komma (und inklusive des Kommas) ignoriert werden, zumindest nach den Erklärungen, die ich bisher gelesen habe.</p>
</blockquote>
<p>Das stimmt ja auch, aber du weist hier nirgendwo eine Gleitkommazahl einem int zu. Du liest ein int ein und dabei wird nur solange gelesen, wie keine Zeichen vorkommen, die in einem int nichts verloren haben. '.' ist so eins.<br />
Beim nächsten Durchlauf ist bei Eingabe von 4.1 also noch &quot;.1&quot; im Eingabepuffer. '.' ist immer noch kein erlaubtes Zeichen und daher bricht das Ganze ab.<br />
if-Schleifen gibt es übrigens nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858894</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Sat, 20 Feb 2010 22:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Sat, 20 Feb 2010 22:27:24 GMT]]></title><description><![CDATA[<p>Das von Athar erzählte lässt sich hiermit</p>
<pre><code class="language-cpp">int test;

	cin &gt;&gt; test;
	cout &lt;&lt; test &lt;&lt; endl;
	cout &lt;&lt; cin.rdbuf() &lt;&lt; endl;
</code></pre>
<p>zeigen. Da siehst du, was im Buffer hängen bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858895</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Sat, 20 Feb 2010 22:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Sun, 21 Feb 2010 10:38:41 GMT]]></title><description><![CDATA[<p>Ok, danke für den Hinweis.</p>
<p>Das heißt, man könnte das umgehen, in dem man nach der Berechnung im else-Abschnitt den Puffer leeren würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1858976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1858976</guid><dc:creator><![CDATA[Capet]]></dc:creator><pubDate>Sun, 21 Feb 2010 10:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Sun, 21 Feb 2010 17:14:49 GMT]]></title><description><![CDATA[<p>man könnte es beheben indem man eine ganze zeile mittels getline() einliest, und diese dann selbst in einen integer wandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859178</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 21 Feb 2010 17:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Mon, 22 Feb 2010 18:08:45 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>man könnte es beheben indem man eine ganze zeile mittels getline() einliest, und diese dann selbst in einen integer wandelt.</p>
</blockquote>
<p>Neeiiiin - getline ist doof<br />
Besser</p>
<pre><code class="language-cpp">.   (cin &gt;&gt; test).ignore( 999, '\n);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1859697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859697</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Mon, 22 Feb 2010 18:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to Verhalten bei bei Schleifenverarbeitung on Mon, 22 Feb 2010 18:19:00 GMT]]></title><description><![CDATA[<p>Mal abgesehen, dass das der Lesbarkeit halber besser in zwei Zeilen geschrieben gehört, macht das nicht, was du willst, wenn dir jemand &quot;abc&quot; in einen Integer zu schreiben versucht.</p>
<p>Zwar kann man sich da mit clear und ignore was zusammenschustern, aber wenn dein Input zeilenweise gedacht ist, macht es auch Sinn, ihn zeilenweise zu verarbeiten - insofern hat hustbärs Ansatz durchaus etwas für sich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1859699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1859699</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 22 Feb 2010 18:19:00 GMT</pubDate></item></channel></rss>