C语言switch分支内if语句计算税款无输出问题求助
C语言个税计算器问题修复
核心错误点
- switch分支顺序错误:
default分支写在了case 1前面,输入1时会优先匹配default分支直接退出,永远不会执行case 1的逻辑,这是无输出的核心原因 scanf读取收入的语法错误:一是格式符不能用%.2lf,scanf不支持精度限制,应改为%lf;二是缺少取地址符&,应该传入&income而非income;三是格式串末尾多余的\n会要求用户多输入一次换行才会结束读取- 范围判断逻辑错误:C语言不支持
0 < income <= 24000这类连续比较写法,实际执行时会先判断0 < income得到布尔值0或1,再判断这个值是否<=24000,导致判断永远为真,必须拆分为income > 0 && income <= 24000的逻辑与写法 - 分支覆盖不全:缺少收入超过58000的处理逻辑,也未实现报税身份2、3、4的计算逻辑
- 错误判断逻辑冗余:
case 6~9的分支可以省略,default已经可以覆盖所有非1-5的输入场景
修复后完整代码
#include<stdio.h> int main() { // 声明:status=报税身份,income=收入,taxOwed=应缴税款 int status; double income, taxOwed; // 打印菜单 printf("************Menu****************\n"); printf("1) Single\n"); printf("2) Married Filing Jointly\n"); printf("3) Married Filing Separately\n"); printf("4) Head of Household\n"); printf("5) Exit\n"); printf("\n"); printf("********************************\n"); printf("\n"); printf("Enter status : "); scanf("%d", &status); // 业务逻辑处理 switch(status) { case 5: printf("\n"); printf("Exit Program...\n"); break; case 1: printf("Enter your taxable TI: $"); scanf("%lf", &income); if (income > 0 && income <= 24000) { taxOwed = income * 0.15; printf("\nThe taxes owed are: $%.2lf", taxOwed); } else if (income > 24000 && income <= 58000) { taxOwed = 3600 + 0.28 * (income - 24000); printf("\nThe taxes owed are: $%.2lf", taxOwed); } else { printf("\nIncome out of current calculation range."); } break; case 2: case 3: case 4: printf("This filing status is not implemented yet."); break; default: printf("You entered a wrong status. Program Exit . . ."); break; } return 0; }
内容的提问来源于stack exchange,提问作者NewB123
相关产品推荐
相关产品推荐

