If Verschachtelung Fehler



  • Moin,

    ich soll ein Programm schreiben, das ein Bruttoeinkommen einließt und die passenden Steuern dazu berechnet, ebenso das Nettoeinkommen.

    Es gelten die Regeln:
    (1) Bruttogehalt bis 12.000 € Keine Steuer
    (2) Bruttogehalt über 12.000 € bis 30.000 € 12,5% Steuer
    (3) Bruttogehalt über 30.000 € 30 % Steuer

    Das Programm funktioniert für Zahlen von 0-30000, aber ab 30.001 springt es nicht zu Option 3 sondern zurück zu Option 1.
    Ich habe jetzt schon nach ähnlichen Codes gesucht, um zu sehen ob ich falsch verschachtelt habe, aber dort keinen Fehler gefunden. Vielleicht kann mir einer von euch sagen, wo mein Fehler liegt.
    Zu den Variablen:
    b= brutto
    s= Steuern
    n= netto
    Hier der Code:

    #include <iostream>
    using namespace std;
    double b;
    double s;
    double n;
    int main()
    {
        cout << "Dieses Programm gibt Ihnen bei Eingabe Ihres Bruttogehalts die zu entrichtende Steuer und Ihr Nettogehalt aus." << endl << endl;
        cin >> b;
        if (b <= 12000) 
        {    
            s = 0; n = b;
        }
        else if (b <= 30000) 
        {
            s = b * 0.125; n = b - s;
        }
        else  
        {
            s = b * 0, 3; n = b - s;
        }
        cout << "Sie müssen " << s << " Euro Steuern bezahlen." << endl << endl <<
            "Ihr Nettogehalt beträgt " << n << " Euro." << endl << endl;
    } 
    

    Vielen Dank für jede Hilfe,

    Corona++



  • @corona sagte in If Verschachtelung Fehler:

    s = b * 0, 3;

    Was soll das deiner Meinung nach machen?



  • @corona sagte in If Verschachtelung Fehler:

    sondern zurück zu Option 1.

    Woher weisst du das? Benutze einen Debugger.

    Beachte den Kommentar von @eigenartig .



  • @corona sagte in If Verschachtelung Fehler:

    Das Programm funktioniert für Zahlen von 0-30000, aber ab 30.001 springt es nicht zu Option 3 sondern zurück zu Option 1.

    Woher weisst du das? Der dritte Zweig führt nämlich effektiv die selbe Berechung durch wie der erste - dein Problem ist ein anderes:

    https://ideone.com/HJJcYZ

    😉



  • Danke, das wars.

    Oh man, ich habe am vollkommen falschen Ort nach dem Fehler gesucht.



  • @Finnegan Danke auch für die Seite, die wird mir noch gute Dienste leisten.



  • Bitte wiederhole 100x:
    "Ich werde beim Kompilieren immer Warnungen einschalten und beachten"
    🙂

    Dann hättest du sowas (oder ähnlich, je nach Compiler) gesehen:

    $ g++ /tmp/komma.cpp -Wall -Wextra
    /tmp/komma.cpp: In function ‘int main()’:
    /tmp/komma.cpp:20:21: warning: right operand of comma operator has no effect [-Wunused-value]
       20 |         s = b * 0, 3; n = b - s;
          |                     ^
    
    

    oder

    $ clang++-10 /tmp/komma.cpp -Wall -Wextra
    /tmp/komma.cpp:20:20: warning: expression result unused [-Wunused-value]
            s = b * 0, 3; n = b - s;
                       ^
    


  • @corona sagte in If Verschachtelung Fehler:

    Zu den Variablen:
    b= brutto
    s= Steuern
    n= netto

    Warum nennst Du die dann nicht so!?!?!?!?



  • Interessant, für eine Zuweisung ist es der right operand der keinen Effekt hat.

    Für if(false, true) und while(true, false) ist es andersrum.

    Warum wohl.



  • @eigenartig sagte in If Verschachtelung Fehler:

    Interessant, für eine Zuweisung ist es der right operand der keinen Effekt hat.

    Für if(false, true) und while(true, false) ist es andersrum.

    Warum wohl.

    Was bindet stärker: = oder ,? Wenn du das beantwortest, hast du die Lösung.


Log in to reply