为什么在没有初始化的情况下使用可变利率? C ++

时间:2016-11-02 12:34:52

标签: c++

案例控制结构

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);

此程序需要读取采购金额和税码。然后,程序必须计算销售税和应付总金额,并打印采购金额,销售税和应付总金额。 为什么程序在输入税码和购买金额后无法运行?

2 个答案:

答案 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结构内初始化变量。

这里有两个主要问题。

  1. tax_code是一个整数,您已使用%d格式说明符从用户输入中正确转换它。但是,您的案例标签将此整数值与char(使用数字周围的单引号)进行比较,即使“数字”看起来相同,因为它们是不同的数据类型并且在内存中以不同方式表示,因此比较将失败。

  2. 您的case标签仅处理tax_code为0,1,2或3的情况。如果是其他任何值,则表示您没有default:标签,rate将不会被分配任何内容,因此在您稍后使用它时会被取消初始化。