C C-Programm für die Berechnung der Einkommenssteuer funktioniert nicht...

FeWeis

Newbie
Registriert
Apr. 2017
Beiträge
7
Hallo Leute,

ich muss für eine Hausarbeit ein Programm zur Berechnung der Einkommenssteuer schreiben, jetzt das Problem:
Immer wenn ich das Programm getestet habe kam als Ergebnis nur "-0,00" raus und ich weiß nicht wieso... Ich sitze schon ziemlich lange dran, hab im Internet nach Lösungen gesucht, aber bin leider auf nichts gestoßen, was mir weitergeholfen hätte.
Vielleicht weiß hier ja jemand, was ich falsch gemacht habe, ich bin mit meinem Latein am Ende... :(
Vielen Dank schon mal :) !

Aufgabenstellung: http://imgur.com/a/nbfNT
Code: http://imgur.com/a/WMWHq
Consolen-Ausgabe: http://imgur.com/a/JboUl
Compiler Error-Code: http://imgur.com/a/lFQzY
 
Füge Quellcode und Ausgaben auf dem Terminal bitte direkt hier als <CODE>...</CODE> wobei du die spitze durch eckige Klammern ersetzen musst.

Wenn du die Compilerwarnings in eine beliebigen Suchmaschine suchst findet sich da fix die Lösung.
 
Ich habe den Code jetzt umgeändert:

Code:
#include <stdio.h>
#include <stdlib.h>

 int main()
{

   double bruttogehalt, steuer;
   int verheiratet, kinder;
   scanf("%lf%d%d", &bruttogehalt, &verheiratet, &kinder);
   if (bruttogehalt < 0 || (verheiratet != 0 && verheiratet != 1) || kinder < 0){
    printf("Eingabefehler\n");
    return 0;
   }
   else {
   if (bruttogehalt <= 12000) {
    steuer = bruttogehalt * 0.12 * (1.0 - ((verheiratet * 0.2 + kinder * 0.1)));
   }
   if (bruttogehalt > 12000 && bruttogehalt <= 20000){
    steuer = bruttogehalt * 0.15 * (1.0 - ((verheiratet * 0.2 + kinder * 0.1)));

   }
   if (bruttogehalt > 20000 && bruttogehalt <= 30000){
    steuer = bruttogehalt * 0.2 * (1.0 - ((verheiratet * 0.2 + kinder * 0.1)));

   }
   if (bruttogehalt > 30000){
    steuer = bruttogehalt * 0.25 * (1.0 - ((verheiratet * 0.2 + kinder * 0.1)));

    }
    printf("%.2lf\n", steuer);
    return 0;
   }
}

Das Ergebnis ist leider immer noch "-0,00", die Warnungen vom Compiler sind jetzt aber weg
 
Zuletzt bearbeitet:
Du solltest deine Hausaufgaben selbst lösen, sonst lernst du nichts.

Tip: Lerne debuggen mit Print statements, debugger. Teste deine Implementierung, z.B. mit verschienen Einkommenswerten.

Die Warnungen sollten überigens unbedingt gefixt werden, sie weisen auf Programmierfehler hin.
 
Ich habe deinen Code eben mal schnell ausprobiert und bei mir läuft er. Hab nur Sachen anders eingerückt, nach meinem Geschmack, aber das sollte bei C ja keinen Unterschied machen, sofern ich mich nicht irre.

Benutzt du eine IDE, wenn ja welche?
 
Da fehlt ne Ggescheite Beschreibung was das Programm macht.
Es fehlt eine Ausgabe die dem Benutzer sagt was er da wie einzugeben hat.
Es fehlt eine Prüfung das die Benutzereingabe auch das ist, was das programm erwartet.

Ich könnte mir vorstellen, wenn diese Sachen gegeben wären, würde das Programm auch laufen.
 
Dein Programm funktioniert einwandfrei. Getestet mit Code:Blocks und Mingw-Compiler.
 
@MainframeX:
Ich darf da nichts so reinschreiben wie ich will , das ist vom Professor so vorgegeben und wenn ich es doch tue, dann ist es nicht bestanden, weil das Programm, welches unsere Testate bewertet, nur so funktionieren kann.

@Wunderkind:
Das verwirrt mich jetzt, ich benutze auch Code:Blocks... Aber wenn du sagst es funktioniert bei dir, dann muss ich wohl mal ein anderes C-Programm austesten, danke für eure Hilfe. :)
 
Ich hatte das Programm auch mit Code:Blocks getestet und mit Eclipse.

Du könntest evtl nochmal auf stackoverflow nachfragen, da kann man dir vermutlich eher helfen.

Falls du das tust, wäre es super, wenn du uns das Ergebnis der Sache mitteilen könntest. Vllt können wir noch was draus lernen.
 
FeWeis schrieb:
@MainframeX:
Ich darf da nichts so reinschreiben wie ich will , das ist vom Professor so vorgegeben und wenn ich es doch tue, dann ist es nicht bestanden, weil das Programm, welches unsere Testate bewertet, nur so funktionieren kann.
Dann schreib das nur zu Testzwecken rein und lösche es später wieder. Du solltest dir z.B. nach
scanf("%lf%d%d", &bruttogehalt, &verheiratet, &kinder);
mal ausgeben lassen was in den drei Variablen drin steht.
 
Das was Raybeez sagt! Anstatt Leute zu zu fragen solltest du lernen wie du nachvollziehen kannst wo die Probleme auftreten. Entsprechend würde es bedeuten, dass du bei jedem Schritt anfängst nachzuschauen wo es nicht so läuft wie du willst.

Im Übrigen gehört zu einer guten Problembeschreibung auch das genaue Vorgehen. Also neben Compilerversion und IDE auch die genauen Eingaben und Ausgaben beim Test.
 
Ich hab das Programm jetzt nochmal mit einem anderen Programm getestet (CodeLite) und es hat funktioniert. Wieso es mit Code::Blocks nicht funktioniert hat bleibt mir ein Rätsel...
@Piktogramm:
Ich weiß wie das geht, hab damals Java in Eclipse gelernt. Da ich jetzt aber C lerne und ich Eclipse für C nicht zum laufen gebracht habe habe ich Code::Blocks genommen und da gibt's soweit ich weiß kein Debug-Tool wie bei eclipse.
 
Dann wirf halt printf() rein um es nachzuvollziehen. Simpelste Methode zum debuggen überhaupt -.-
 
Meinst Du nicht, dass ich alles mögliche versucht habe? Ich saß an dem Fehler ziemlich lange und habe aus Verzweiflung dann mal hier nachgefragt. Wie ich schon gesagt habe funktioniert das Programm einwandfrei, nur kommt bei Code::Blocks immer -0,00 oder halt Eingabefehler als Ergebnis. Mit einem anderen Programm funktioniert es -> Code ist richtig. Stell mich nicht so hin, als hätte ich null Ahnung vom Programmieren, wenn es dich nervt, dass Leute hier Fragen stellen, dann antworte einfach nicht drauf. Für mich ist das Thema hier jetzt erledigt, es funktioniert und ich habe es abgegeben. Danke an alle, die hilfreich waren! :)
 
Nicht dokumentierte Testfälle wurden nicht gemacht, vor allem aus der Sicht von außen nicht. Entsprechend wird auch im Uhrschleim angefangen. Da du wirklich grundlegende Fehler wie das mehrfache Initialisieren einer Variable hattest, sollte es dich nicht wundern, wenn Andere ein Anfängerniveau annehmen. Da kannst du unterstellen, dass andere genervt seien wie du willst ;).

Wenn es Fehler gab, dann gibt es dafür Gründe. Du machst es dir recht einfach, wenn du den Code als korrekt deklarierst, nur weil es mit einem anderem Toolset klappt.

Edit: Feststellung, als Imgurbild hattest du Ein-/Ausgabe dokumentiert. Mein Fehler.
 
Zurück
Oben