我制作了这个程序,根据用户输入计算一系列工资的税金。一切都工作正常,除了我似乎无法找到一种方法使应用程序忽略最后3个printf并且只是在用户输入负值时打印错误消息。如果用户输入负数,我不想显示最后3个printf,而是希望应用程序只显示“错误:您输入了负数”或类似的东西。我正在使用visual studio作为我的编译器,这是一个C应用程序。帮助PLZ。另外,请为我的编程课轻松一点,我们仍然在做基本的东西。
以下是代码:
#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();
}
答案 0 :(得分:5)
您已经向您展示了如何使用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{}
块中,因此只有在工资为&gt; = 0时才会打印。
答案 1 :(得分:1)
这不是您的问题的答案,但最好让计算机在计算中所有工作。您的代码有一些必须手动计算的中间结果。为什么不让电脑去做呢?它还允许您通过编辑关键功能,括号和速率轻松更改费率结构,而不必担心中间结果。
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);
答案 2 :(得分:0)
我认为您的代码容易出错,并且可以简化很多:
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;
}