C 为什么当我输入“Y”时,跳过的程序将第一个传递给else?
我似乎找不到这段代码中的错误所在。当我输入“Y”时,它跳过第一个if语句,并计算它下面的else语句。我是否有其他悬而未决的问题或是其他问题?我是一个初学者,所以如果我看到它我就不知道了。代码不一定要漂亮或完美,它只需要工作。我是否需要if-else语句而不是if语句?当我使用if-else时,它告诉我有语法错误。正如你所看到的,我试图根据买家是否是教师来计算折扣和销售税。我还需要输入多少才能提交问题。我是新手,所以如果格式不正确,我很抱歉。如果购买价格大于100,则折扣为12%;如果低于100,则折扣为10%。该程序将打印一张包含折扣、税金和总价的收据C 为什么当我输入“Y”时,跳过的程序将第一个传递给else?,c,if-statement,C,If Statement,我似乎找不到这段代码中的错误所在。当我输入“Y”时,它跳过第一个if语句,并计算它下面的else语句。我是否有其他悬而未决的问题或是其他问题?我是一个初学者,所以如果我看到它我就不知道了。代码不一定要漂亮或完美,它只需要工作。我是否需要if-else语句而不是if语句?当我使用if-else时,它告诉我有语法错误。正如你所看到的,我试图根据买家是否是教师来计算折扣和销售税。我还需要输入多少才能提交问题。我是新手,所以如果格式不正确,我很抱歉。如果购买价格大于100,则折扣为12%;如果低于100
#include <stdio.h>
#include <stdlib.h>``
#define SALES_TAX 0.05
#define REG_DISCOUNT 0.10
#define DISCOUNT 0.12
int main()
{
double price, discount,total,x,tax;
printf("Enter purchase total=>");
scanf("%lf",&total);
printf("If you are a teacher enter Y if not enter N=>");
scanf("%lf",&x);
if(x=='Y'){
if(total<100)
{
discount = total * REG_DISCOUNT;
tax = (total - discount)* SALES_TAX;
price = total - discount + tax;
}
else{
discount = total * DISCOUNT;
tax = (total - discount)* SALES_TAX;
price = total + tax - discount;
}
printf("The total price of your items is = $%.2f.\n",total);
printf("Your 12 percent discount = $%.2f.\n",discount);
printf("You're total tax is $%.2f.\n",tax);
printf("You're final purchase price is $%.2f.\n",price);
}
else {
tax = total * SALES_TAX;
price = total + tax;
printf("The total price of your items is $%.2f.\n",total);
printf("Your total tax is $%.2f.\n",tax);
printf("Your total purchase price with tax is $%.2f.\n",price);
}
return(0);
}
读取字符串X的scanf语句有一个表示浮点的格式代码。尝试使用%s修改变量声明,使X成为字符:
double price, discount,total,tax;
char x;
现在,当您执行'scanf%c'时,&x'x将具有正确的类型,并且您的检查'ifx=='Y'将按预期工作。TL;博士使用调试器。您正在将double与字符进行比较;那不行。事实上,您的编译器可能会显示一条警告:在您确切知道忽略警告的原因之前,不要忽略警告。那么应该改为扫描%c,&x?或者扫描%char,&x。根据建议的更改,您仍然会尝试将字符读入双精度字符。使用其他数据类型存储Y或N。警告:格式“%s”要求参数类型为“char*”,但参数2的类型为“double*”[-Wformat=]scanf%s,&x^我不知道为什么当我把它作为一个例子阅读时,它总是说“参数2的类型是double”character@BryceMarshall因为x是双精度的。