案例控制结构
int tax_code;
float p_amount, sales_tax, total, rate;
printf("\t\t\t Tax code\n\n");
printf("\t\t\t 0 - 0%%\n");
printf("\t\t\t 1 - 3%%\n");
printf("\t\t\t 2 - 5%%\n");
printf("\t\t\t 3 - 7%%\n\n");
printf("Key in tax code >>");
scanf("%d", &tax_code);
printf("Key in purchase amount >>");
scanf("%f", &p_amount);
switch (tax_code)
{
case '0' :
rate = 0.00;
break;
case '1' :
rate = 0.03;
break;
case '2' :
rate = 0.05;
case '3' :
rate = 0.07;
}
sales_tax = p_amount * rate;
total = p_amount + sales_tax;
printf("\nPurchase amount is RM %.2f\n", p_amount);
printf("Sales tax is RM %.2f\n", sales_tax);
printf("Total amount is RM %.2f\n", total);
此程序需要读取采购金额和税码。然后,程序必须计算销售税和应付总金额,并打印采购金额,销售税和应付总金额。 为什么程序在输入税码和购买金额后无法运行?
答案 0 :(得分:3)
scanf("%d", &tax_code);
%d
转换格式转换整数。如果" 1"输入后,tax_code
设置为1。
您的switch
语句测试tax_code
字符 ' 0',' 1', ' 2',' 3'等...而不是实际的数字0,1,2和3.
答案 1 :(得分:0)
如果我理解正确,您的错误告诉您,您尝试使用变量rate
而不进行初始化。这是因为您在有限switch-case
结构内初始化变量。
这里有两个主要问题。
tax_code
是一个整数,您已使用%d
格式说明符从用户输入中正确转换它。但是,您的案例标签将此整数值与char
(使用数字周围的单引号)进行比较,即使“数字”看起来相同,因为它们是不同的数据类型并且在内存中以不同方式表示,因此比较将失败。
您的case
标签仅处理tax_code
为0,1,2或3的情况。如果是其他任何值,则表示您没有default:
标签,rate
将不会被分配任何内容,因此在您稍后使用它时会被取消初始化。