-
当代码格式不好时,很难阅读。
-
在里面
calculateTax()
局部变量
taxBracket
未初始化,但您希望使用大写不同的参数。这是您的主要问题,编译器应该为使用未初始化的变量生成警告。
-
的包含
scanf()
和
printf()
缺少函数。
-
对于小程序,通常可以通过移动来消除原型
main()
到底部。
-
(不固定)业务规则如
taxbracket()
和
calculatetax()
经常发生变化。它们受益于被表示为数据(表),而不是可能外部化的代码(文件、数据库、web服务等)。在这种情况下,它还消除了所有
income * ...
重复。这
提前返回
-特殊情况下的模式通常会导致代码简洁。
double calculatetax(double income, int taxbracket) {
if(taxbracket < 1 || taxbracket > 4)
return 0;
const double rates[] = {0.1, 0.15, 0.23, 0.33};
return income * rates[taxbracket - 1];
}
您可以重构它,比如说,返回税率,并让调用者通过乘以来确定税额
income
:
double taxrate(int taxbracket) {
if(taxbracket < 1 || taxbracket > 4)
return 0;
const double rates[] = {0.1, 0.15, 0.23, 0.33};
return rates[taxbracket - 1];
}
-
忽略
;
在里面
default:;
。switch语句的真正威力是在打开
enum
.如果你忽略了包罗万象
default
编译器现在可以判断您是否遗漏了一个案例。
#include <stdio.h>
int taxbracket(double income, char maritalstatus) {
if (maritalstatus == 's') {
if(income < 15000)
return 0;
else if (income >= 15000 && income < 50000)
return 1;
else if (income >= 50000 && income < 90000)
return 2;
else if (income >=90000 && income < 160000)
return 3;
else
return 4;
}
else if (maritalstatus == 'm') {
if (income < 30000)
return 0;
else if (income>= 30000 && income < 80000)
return 1;
else if (income>= 80000 && income < 140000)
return 2;
else if (income >= 140000 && income < 220000)
return 3;
else
return 4;
}
return -1;
}
double calculatetax(double income, int taxbracket) {
double tax = 0.0;
switch(taxbracket) {
case 0:
tax = 0.0;
break;
case 1:
tax = income * 0.10;
break;
case 2:
tax = income * 0.15;
break;
case 3:
tax = income * 0.23;
break;
case 4:
tax = income * 0.33;
break;
default:
break;
}
return tax;
}
int main() {
double income;
char maritalstatus;
int taxbracketvalue;
printf("enter income: ");
scanf("%le", &income);
printf("enter marital status (s for single, m for married): ");
scanf(" %c", &maritalstatus);
taxbracketvalue = taxbracket(income, maritalstatus);
if(taxbracketvalue == -1) {
printf("invalid marital status.\n");
return 1;
}
double tax = calculatetax(income, taxbracketvalue);
printf("income tax is $%.2f\n", tax);
return 0;
}
和示例运行:
Enter income: 30000
Enter marital status (s for single, m for married): s
Income tax is $3000.00