[英]Tax calculator issue
我制作了這個程序,可以根據用戶輸入來計算一系列薪水的稅額。 除了我似乎無法找到一種方法使應用程序忽略最后3個printf的事實,並且如果用戶輸入一個負值,則僅打印一條錯誤消息,一切都正常。 如果用戶輸入一個負數,我不想顯示最后3個printf,而是希望該應用程序僅顯示“錯誤:您輸入了一個負數”或類似的東西。 我使用Visual Studio作為編譯器,這是一個C應用程序。 請幫助。 另外,請為我的編程課輕松一點,在該課上我們仍然在做非常基礎的事情。
這是代碼:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float salary, tax = 0;
printf("\n\n\tEnter the salary ammount per year: \t\t$");
scanf("%f", &salary);
if (salary <= 10000){
tax=0;
}
else if (salary > 10000 && salary <= 40000){
tax = (salary - 10000)*0.2;
} else if (salary > 40000 && salary <= 50000){
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary > 50000 && salary <= 75000){
tax = 9000 + (salary - 50000)*0.4;
} else if (salary > 75000.01 && salary <= 100000){
tax = 19000 + (salary - 75000)*0.5;
} else if (salary > 100000 && salary >=100000.01){
tax = 31500 + (salary - 100000)*0.6;
}
printf("\nSalary per year:\t\t $ %.2f\n\n", salary);
printf("Tax ammount per year:\t\t $ %.2f\n\n", tax);
printf("Salary after tax:\t\t $ %.2f\n", salary-tax);
getchar();getchar();
}
您已經演示了如何使用if
語句檢查int
是否在給定范圍內。 只需將相同的邏輯應用於輸出即可。 負數< 0
。
例如:
if(salary < 0) {
//print error
} else {
if (salary <= 10000) {
tax=0;
} else if (salary > 10000 && salary <= 40000) {
tax = (salary - 10000)*0.2;
} else if (salary > 40000 && salary <= 50000) {
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary > 50000 && salary <= 75000) {
tax = 9000 + (salary - 50000)*0.4;
} else if (salary > 75000/*.01*/ && salary <= 100000) {
tax = 19000 + (salary - 75000)*0.5;
} else /*if (salary > 100000 && salary >=100000.01)*/ {
tax = 31500 + (salary - 100000)*0.6;
}
printf("\nSalary per year:\t\t $ %.2f\n\n", salary);
printf("Tax ammount per year:\t\t $ %.2f\n\n", tax);
printf("Salary after tax:\t\t $ %.2f\n", salary-tax);
}
在最后的else if
,您實際上不需要if
語句,只需要else
。 盡管可以肯定(並且為了清楚起見)可以包含它。 但是,你絕對不需要** salary >=100000.01)
的>=
僅評估為true
,如果salary > 100000
已經評估為true
。 並且&&
僅當雙方都評估為true
才會評估為true
。 唯一的一種可能是正確的,而另一種則是不正確的,如果某人輸入了奇數工資(100000.005),但是即使輸入了該工資,他們仍然需要處於此稅級。
無論如何,你printf
語句是現在包含在else
的塊if(salary<0) {}else{}
塊,所以如果工資,他們將只打印> = 0。
這不是您問題的答案,但始終最好讓計算機完成計算中的所有工作。 您的代碼中有一些中間結果,您必須手工計算這些結果。 為什么不讓計算機來做呢? 它還使您可以通過編輯關鍵功能,括號和費率輕松地更改費率結構,而不必擔心中間結果。
float tax = 0;
struct {
float basis;
float rate;
} *ptr, rateStructure[] =
// list these from high to low brackets
{
{100000,0.6},
{ 75000,0.5},
{ 50000,0.4},
{ 40000,0.3},
{ 10000,0.2},
{ 0,0.1}
};
ptr = rateStructure;
do {
float bracket = salary - ptr->basis;
if (bracket > 0) {
tax += bracket * ptr->rate;
salary -= bracket;
}
ptr++;
} while (salary);
我認為您的代碼容易出錯,並且可以簡化很多:
if (salary <= 10000){
tax=0;
} else if (salary <= 40000){
tax = (salary - 10000)*0.2;
} else if (salary <= 50000){
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary <= 75000){
tax = 9000 + (salary - 50000)*0.4;
} else if (salary <= 100000){
tax = 19000 + (salary - 75000)*0.5;
} else {
tax = 31500 + (salary - 100000)*0.6;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.