簡體   English   中英

稅收計算器問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM