C 为什么当我输入“Y”时,跳过的程序将第一个传递给else?

C 为什么当我输入“Y”时,跳过的程序将第一个传递给else?,c,if-statement,C,If Statement,我似乎找不到这段代码中的错误所在。当我输入“Y”时,它跳过第一个if语句,并计算它下面的else语句。我是否有其他悬而未决的问题或是其他问题?我是一个初学者,所以如果我看到它我就不知道了。代码不一定要漂亮或完美,它只需要工作。我是否需要if-else语句而不是if语句?当我使用if-else时,它告诉我有语法错误。正如你所看到的,我试图根据买家是否是教师来计算折扣和销售税。我还需要输入多少才能提交问题。我是新手,所以如果格式不正确,我很抱歉。如果购买价格大于100,则折扣为12%;如果低于100

我似乎找不到这段代码中的错误所在。当我输入“Y”时,它跳过第一个if语句,并计算它下面的else语句。我是否有其他悬而未决的问题或是其他问题?我是一个初学者,所以如果我看到它我就不知道了。代码不一定要漂亮或完美,它只需要工作。我是否需要if-else语句而不是if语句?当我使用if-else时,它告诉我有语法错误。正如你所看到的,我试图根据买家是否是教师来计算折扣和销售税。我还需要输入多少才能提交问题。我是新手,所以如果格式不正确,我很抱歉。如果购买价格大于100,则折扣为12%;如果低于100,则折扣为10%。该程序将打印一张包含折扣、税金和总价的收据

#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是双精度的。