<?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[Anfänger: Problem mit if-Anweisung]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bin gerade bei Kapitel 5 Aufgabe 8 im Buch &quot;Einführung in die Programmierung mit C++&quot; von Bjarne Stroustrup und finde meinen Fehler nicht.</p>
<pre><code>#include &quot;std_lib_facilities.h&quot;

class input_exc {};
class too_many {};
class too_few {};

int main()
{
    char exit = ' ';
    vector&lt;int&gt; numbers;
    int n;
    int how_much = 0;
    int sum = 0;
    cout &lt;&lt; &quot;Geben Sie beliebig viele Ganzzahlen ein! Abschließen mit [|]&quot; &lt;&lt; endl;
    while(exit != '|')
    {
        try
        {
            cin &gt;&gt; n;
            if(!cin) throw input_exc();
            numbers.push_back(n);
        }
        catch(input_exc)
        {
            cin.clear();
            cin &gt;&gt; exit;
            if(exit != '|')
                cout &lt;&lt; &quot;Eingabe nicht übernommen: Fehlerhafte Eingabe!&quot; &lt;&lt; endl;
        }
        catch(...)
        {
            cerr &lt;&lt; &quot;Unbekannter Fehler&quot; &lt;&lt; endl;
        }
    }
    exit = ' ';
    while(exit != '|')
    {
        cout &lt;&lt; &quot;\nWie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|] &quot;;
        try
        {
            cin &gt;&gt; how_much;
            if(!cin) throw input_exc();
            else if (how_much &gt; numbers.size()) throw too_many();
            else if (how_much &lt;= 0) throw too_few();
            else if (how_much &lt;= numbers.size() || how_much &gt; 0)
                {
                    for(int i = 0; i &lt; how_much; ++i)
                    {
                        sum += numbers[i];
                    }
                    cout &lt;&lt; &quot;Die Summe der ersten &quot; &lt;&lt; how_much &lt;&lt; &quot; Elemente: &quot;;

                    for(int i = 0; i &lt; how_much; ++i)
                    {
                        cout &lt;&lt; numbers[i] &lt;&lt; &quot; &quot;;
                    }
                    cout &lt;&lt; &quot;ist &quot; &lt;&lt; sum &lt;&lt; endl;
                    exit = '|';
                }
            else throw too_many();
        }
        catch(input_exc)
        {
            cin.clear();
            cin &gt;&gt; exit;
            if(exit != '|')
                cout &lt;&lt; &quot;Eingabe nicht übernommen: Fehlerhafte Eingabe!&quot; &lt;&lt; endl;
        }
        catch(too_few)
        {
            cout &lt;&lt; how_much &lt;&lt; &quot; ??? Das ergibt keinen Sinn!&quot; &lt;&lt; endl;
        }

        catch(too_many)
        {
            cout &lt;&lt; how_much &lt;&lt; &quot; ??? So viele Zahlen wurden garnicht eingegeben. Es sind insgesamt: &quot; &lt;&lt; numbers.size() &lt;&lt; endl;
        }

        catch(...)
        {
            cerr &lt;&lt; &quot;Unbekannter Fehler&quot; &lt;&lt; endl;
        }
    }
    return 0;
}
</code></pre>
<p>Wenn ich nun eine negative Menge von Zahlen aufaddieren will, sollte z.B die Ausgabe &quot;-3 ??? Das ergibt keinen Sinn!&quot; ausgegeben werden. Wenn ich teste sieht das so aus:</p>
<p>~/cpp/buch$ ./Uebung8<br />
Geben Sie beliebig viele Ganzzahlen ein! Abschließen mit [|]<br />
12 23 34 45 56 |</p>
<p>Wie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|] -3<br />
-3 ??? So viele Zahlen wurden garnicht eingegeben. Es sind insgesamt: 5</p>
<p>Wie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|]</p>
<p>Anscheinend meint meine Lösung das -3 &gt; 5 ist. Ich suche jetzt seit Stunden und finde nichts. Ist bestimmt was ganz blödes. Wäre dankbar für eure Hilfe.</p>
<p>Gruß<br />
dirac</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321893/anfänger-problem-mit-if-anweisung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 15:46:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321893.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Nov 2013 09:34:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 09:34:06 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bin gerade bei Kapitel 5 Aufgabe 8 im Buch &quot;Einführung in die Programmierung mit C++&quot; von Bjarne Stroustrup und finde meinen Fehler nicht.</p>
<pre><code>#include &quot;std_lib_facilities.h&quot;

class input_exc {};
class too_many {};
class too_few {};

int main()
{
    char exit = ' ';
    vector&lt;int&gt; numbers;
    int n;
    int how_much = 0;
    int sum = 0;
    cout &lt;&lt; &quot;Geben Sie beliebig viele Ganzzahlen ein! Abschließen mit [|]&quot; &lt;&lt; endl;
    while(exit != '|')
    {
        try
        {
            cin &gt;&gt; n;
            if(!cin) throw input_exc();
            numbers.push_back(n);
        }
        catch(input_exc)
        {
            cin.clear();
            cin &gt;&gt; exit;
            if(exit != '|')
                cout &lt;&lt; &quot;Eingabe nicht übernommen: Fehlerhafte Eingabe!&quot; &lt;&lt; endl;
        }
        catch(...)
        {
            cerr &lt;&lt; &quot;Unbekannter Fehler&quot; &lt;&lt; endl;
        }
    }
    exit = ' ';
    while(exit != '|')
    {
        cout &lt;&lt; &quot;\nWie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|] &quot;;
        try
        {
            cin &gt;&gt; how_much;
            if(!cin) throw input_exc();
            else if (how_much &gt; numbers.size()) throw too_many();
            else if (how_much &lt;= 0) throw too_few();
            else if (how_much &lt;= numbers.size() || how_much &gt; 0)
                {
                    for(int i = 0; i &lt; how_much; ++i)
                    {
                        sum += numbers[i];
                    }
                    cout &lt;&lt; &quot;Die Summe der ersten &quot; &lt;&lt; how_much &lt;&lt; &quot; Elemente: &quot;;

                    for(int i = 0; i &lt; how_much; ++i)
                    {
                        cout &lt;&lt; numbers[i] &lt;&lt; &quot; &quot;;
                    }
                    cout &lt;&lt; &quot;ist &quot; &lt;&lt; sum &lt;&lt; endl;
                    exit = '|';
                }
            else throw too_many();
        }
        catch(input_exc)
        {
            cin.clear();
            cin &gt;&gt; exit;
            if(exit != '|')
                cout &lt;&lt; &quot;Eingabe nicht übernommen: Fehlerhafte Eingabe!&quot; &lt;&lt; endl;
        }
        catch(too_few)
        {
            cout &lt;&lt; how_much &lt;&lt; &quot; ??? Das ergibt keinen Sinn!&quot; &lt;&lt; endl;
        }

        catch(too_many)
        {
            cout &lt;&lt; how_much &lt;&lt; &quot; ??? So viele Zahlen wurden garnicht eingegeben. Es sind insgesamt: &quot; &lt;&lt; numbers.size() &lt;&lt; endl;
        }

        catch(...)
        {
            cerr &lt;&lt; &quot;Unbekannter Fehler&quot; &lt;&lt; endl;
        }
    }
    return 0;
}
</code></pre>
<p>Wenn ich nun eine negative Menge von Zahlen aufaddieren will, sollte z.B die Ausgabe &quot;-3 ??? Das ergibt keinen Sinn!&quot; ausgegeben werden. Wenn ich teste sieht das so aus:</p>
<p>~/cpp/buch$ ./Uebung8<br />
Geben Sie beliebig viele Ganzzahlen ein! Abschließen mit [|]<br />
12 23 34 45 56 |</p>
<p>Wie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|] -3<br />
-3 ??? So viele Zahlen wurden garnicht eingegeben. Es sind insgesamt: 5</p>
<p>Wie viele der eingegebenen Zahlen sollen aufaddiert werden? Abbruch mit [|]</p>
<p>Anscheinend meint meine Lösung das -3 &gt; 5 ist. Ich suche jetzt seit Stunden und finde nichts. Ist bestimmt was ganz blödes. Wäre dankbar für eure Hilfe.</p>
<p>Gruß<br />
dirac</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368543</guid><dc:creator><![CDATA[dirac]]></dc:creator><pubDate>Thu, 28 Nov 2013 09:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 09:47:51 GMT]]></title><description><![CDATA[<p>Hallo dirac,</p>
<p>wenn Du den Code compilierst so liefert der Compiler Dir bereits 2mal eine Warnung:<br />
Zeile 43: warning C4018: '&gt;' : signed/unsigned mismatch<br />
Zeile 45: warning C4018: '&lt;=' : signed/unsigned mismatch</p>
<p>Diese Warnungen solltest Du Ernst nehmen.</p>
<p>Bevor der Vergleich durchgeführt wird, wird der int ' <code>how_much</code> ' in einen unsigned-Typ konvertiert und das ist eine ziemlich große Zahl.<br />
Besser:</p>
<pre><code>else if (how_much &gt; int(numbers.size())) throw too_many(); // Zeile 43
</code></pre>
<p>Zeile 45 entsprechend ändern.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368547</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 28 Nov 2013 09:47:51 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 09:54:40 GMT]]></title><description><![CDATA[<p>Wieso machst Du das mit Exceptions?</p>
<p>Exception heisst Ausnahme. Du verwendest die aber zur Fallunterscheidung. Dafür sind Exceptions nicht gedacht.</p>
<p>Im Falle von -3 kommst Du in den else-Pfad in Zeile 60. -3 ist NICHT größer als 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368551</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Thu, 28 Nov 2013 09:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 10:16:21 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Wieso machst Du das mit Exceptions?</p>
<p>Exception heisst Ausnahme. Du verwendest die aber zur Fallunterscheidung. Dafür sind Exceptions nicht gedacht.</p>
</blockquote>
<p>Vielleicht war das Sinn der Übung 8 (s.o.)</p>
<p>Falls nicht - so lassen sich für alle Freunde der for-Schleife die Zeilen 15 bis 34 durch folgenden Code ersetzen:</p>
<pre><code>for( int n; cin &gt;&gt; exit &amp;&amp; exit != '|' &amp;&amp; cin.putback(exit) &gt;&gt; n; )
        numbers.push_back( n );
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368564</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 28 Nov 2013 10:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 10:29:18 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Im Falle von -3 kommst Du in den else-Pfad in Zeile 60. -3 ist NICHT größer als 0.</p>
</blockquote>
<p>unsigned int(-3) aber schon...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368567</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 28 Nov 2013 10:29:18 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 21:42:31 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Hallo dirac,</p>
<p>wenn Du den Code compilierst so liefert der Compiler Dir bereits 2mal eine Warnung:<br />
Zeile 43: warning C4018: '&gt;' : signed/unsigned mismatch<br />
Zeile 45: warning C4018: '&lt;=' : signed/unsigned mismatch</p>
<p>Diese Warnungen solltest Du Ernst nehmen.</p>
<p>Bevor der Vergleich durchgeführt wird, wird der int ' <code>how_much</code> ' in einen unsigned-Typ konvertiert und das ist eine ziemlich große Zahl.<br />
Besser:</p>
<pre><code>else if (how_much &gt; int(numbers.size())) throw too_many(); // Zeile 43
</code></pre>
<p>Zeile 45 entsprechend ändern.</p>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>Danke, das hat fast geklappt.</p>
<p>So wie du vorgeschlagen hast, funktioniert es bei mir nicht. Das Programm reagiert dann genauso wie vorher. Ich habe nun zwischen Zeile 40 und 41 eine weitere Zeile eingefügt.</p>
<pre><code>int temp_size = numbers.size();
</code></pre>
<p>Und temp_size entsprechend in die if Abfragen eingefügt. Das funktioniert. Den Gedanken dahinter mit unsigned habe ich wohl verstanden. Jetzt verstehe ich nur nicht, warum dein Vorschlag nicht funktioniert.</p>
<p>Die beiden Warnungen bekomme ich übrigens gar nicht. Die einzige Warnung, die ich bekomme, habe ich seitdem ich mit C++ angefangen habe:</p>
<pre><code>/usr/include/c++/4.7/backward/backward_warning.h:33:2: warning: #warning This
file includes at least one deprecated or antiquated header which may be removed 
without further notice at a future date. Please use a non-deprecated interface 
with equivalent functionality instead. For a listing of replacement headers and 
interfaces, consult the file backward_warning.h. To disable this warning use 
-Wno-deprecated. [-Wcpp]
</code></pre>
<p>Bisher lief aber alles.</p>
<p>Ich benutze den Compiler &quot;gcc version 4.7.2 (Debian 4.7.2-5)&quot; auf Debian Wheezy.</p>
<p>Gruß<br />
dirac</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368755</guid><dc:creator><![CDATA[dirac]]></dc:creator><pubDate>Thu, 28 Nov 2013 21:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit if-Anweisung on Thu, 28 Nov 2013 21:55:22 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>MichelRT schrieb:</p>
<blockquote>
<p>Wieso machst Du das mit Exceptions?</p>
<p>Exception heisst Ausnahme. Du verwendest die aber zur Fallunterscheidung. Dafür sind Exceptions nicht gedacht.</p>
</blockquote>
<p>Vielleicht war das Sinn der Übung 8 (s.o.)</p>
<p>Falls nicht - so lassen sich für alle Freunde der for-Schleife die Zeilen 15 bis 34 durch folgenden Code ersetzen:</p>
<pre><code>for( int n; cin &gt;&gt; exit &amp;&amp; exit != '|' &amp;&amp; cin.putback(exit) &gt;&gt; n; )
        numbers.push_back( n );
</code></pre>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>Naja, die Aufgabe verlangt dieses Programm zu schreiben und dann möglichst alle Fehler zu behandeln. Ich hatte das schon so mit den Exceptions verstanden. Werde mir dann das Kapitel wohl noch mal vor nehmen müssen. Danke für den Hinweis.</p>
<p>Den Vorgeschlagenen Ersatz für Zeile 15-34 verstehe ich jetzt auf Anhieb nicht. Bisher kam im Buch putback() auch noch nicht vor.</p>
<p>Gruß<br />
dirac</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368758</guid><dc:creator><![CDATA[dirac]]></dc:creator><pubDate>Thu, 28 Nov 2013 21:55:22 GMT</pubDate></item></channel></rss>