C-Programm Einkommenssteuer berechnung
Hey ehm ich bin neu und habe keine derlei frage wie ich sie habe gefunden deswegen hoffe ich es ist ok wen ich einfach mal so rein frage und zwar habe ich dieses Programm geschrieben und wenn ich es ausführen lasse kommt für die variable "steuern " immer 0,00 raus kann mir jemand helfen ^^ ?
include
int main (void){ float steuer; double bruttogehalt; int verheiratet, kinder, a; scanf ("%lf%d%d", &bruttogehalt , &verheiratet , &kinder);
if (bruttogehalt<=0){
a=1;
}else if (bruttogehalt>0 && bruttogehalt <= 12000){
a = 2;
}else if (bruttogehalt>12000 && bruttogehalt <=20000){
a=3;
}else if(bruttogehalt>20000 && bruttogehalt <=30000){
a =4;
}else if(bruttogehalt>30000){
a =5;
}
if (verheiratet==1 && kinder>=0){
switch (a){
case 1 : steuer = (bruttogehalt * 0 * (1-(0.2+kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 2 : steuer = (bruttogehalt * 0.12 * (1-(0.2+kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 3 : steuer = (bruttogehalt * 0.15 * (1-(0.2+kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 4 : steuer = (bruttogehalt * 0.20 * (1-(0.2+kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 5 : steuer = (bruttogehalt * 0.25 * (1-(0.2+kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
}
}else if (verheiratet == 0 && kinder>=0 ){
switch (a){
case 1 : steuer = (bruttogehalt * 0 * (1-(kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 2 : steuer = (bruttogehalt * 0.12 * (1-(kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 3 : steuer = (bruttogehalt * 0.15 * (1-(kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 4 : steuer = (bruttogehalt * 0.20 * (1-(kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
case 5 : steuer = (bruttogehalt * 0.25 * (1-(kinder*0.1)));
printf ("%.2lf\n" , & steuer ) ;
break;
}
}else {
printf("Eingaefehler\n");
return 0;
}
return 0; }
1 Antwort
Der Code ist etwas schlecht formatiert...
(Hinweis: ich bin kein C-Programmierer und kann auch grad nichts testen, eventuell sind da mehr Fehler drin oder es ist ein anderer Fehler)
Ich tippe mal auf "& steuer". Entweder du möchtest die Zahl printen (ohne "&") oder du willst den Inhalt des Pointers "steuer" haben ("&steuer"). Allerdings macht das keinen Sinn, da "steuer" als *float* deklariert wurde und nicht als Pointer. Das Entfernen von dem "&" sollte dein Problem also beheben.
Ach und ein Tipp beim Programmieren: Wenn du etwas mehr als doppelt schreibst, kannst du es meist vereinfachen. Das kann man auch hier. Beispielsweise ändert sich die Berechnung durch 3 Faktoren:
- Ein Faktor bei Kinder (abhängig ob verheiratet oder nicht)
- Der Faktor bei Bruttogehalt (abhängig von Bruttogehalt)
- Bruttogehalt
Du musst die Formel für die Berechnung nicht jedes mal immer wieder hinschreiben, es reicht, wenn du die definierten Konstanten stattdessen umwandelst in Variablen und diese vorher berechnest:
//Ersten Faktor berechnen float steuerFaktor; if(bruttogehalt <= 0) //negatives Gehalt ist möglich?? steuerFaktor = 0; else if(bruttogehalt > 0 && bruttogehalt <= 12000) steuerFaktor = 0.12; //... //Zweiten Faktor berechnen float kinderFaktor = 0.0; if(verheiratet) kinderFaktor = 0.2; if(kinder < 0) { printf("Eingabefehler\n"); return -1; //return 0 bedeutet für gewöhnlich, dass kein Fehler aufgetreten ist, ist hier allerdings nicht der Fall. } //Formel steuer = bruttogehalt * steuerFaktor * (1-(kinderFaktor+kinder*0.1)); printf("%.21f\n", steuer); return 0;
Das vereinfacht dir die Änderung, falls beispielsweise die Formel sich ändern muss. Außerdem ist die Berechnung der Faktoren transparenter. Zumindest für mich :D
Ist aber halt deine Sache wie du das machst. Der Fehler ist wohl nur das "&" bei Steuer.
ich musste des "&" beim printen weg machen danke ^^:D