Я создаю простую программу для расчета суммы продаж с использованием if/else и продолжаю получать сообщение об ошибке.

Программа рассчитывает скидки (если клиент учитель) и налог с продаж и находит общую сумму продаж. Я продолжаю получать ошибку:

[Внимание] сравнение между указателем и целым числом [включено по умолчанию]

#include <stdio.h>
#include <math.h>

#define SALES_TAX .05
#define DISCOUNT_LOW .10
#define DISCOUNT_HIGH .12
#define DISCOUNT_LIMIT .100

int main(void)
{
    double purchase_total;
    double discount;
    double discounted_total;
    double sales_tax;
    double total;
    int teacher;
    FILE* output_file;

    /* request inputs */
    printf("Is the customer a teacher (y/n)?");
    scanf("%d", &teacher);
    printf("Enter total purchases.");
    scanf("%lf", &purchase_total);

    /* calculations for teacher */
    if (teacher == "y");
    {/*calculate discount (10% or 12%) and 5% sales tax */
        /* purchase total less than 100 */
        if (purchase_total < 100)
        {
            /* calculate 10% discount */
            discount = purchase_total * DISCOUNT_LOW;
            discounted_total = purchase_total - discount;
        }

        /*purchase total greater than 100 */
        else
        {   /* calculate 12% discount */
            discount = purchase_total * DISCOUNT_HIGH;
            discounted_total = purchase_total - discount;
        }

        printf("Total purchases    $%f\n", purchase_total);
        printf("Teacher's discount (12%%)    %fs\n", discount);
        printf("Discounted total     %f\n", discounted_total);
        printf("Sales tax (5%%)    %f\n", sales_tax);
        printf("Total     $%f\n", total);
    }


    /* calculation for nonteacher */
    if (teacher =="n");
    {
        /* calculate only 5% sales tax */
        sales_tax = purchase_total *  sales_tax;
        total = purchase_total + sales_tax;

        printf("Total purchases    $%f\n", purchase_total);
        printf("Sales tax (5%%)    %f\n", sales_tax);
        printf("Total     $%f\n", total);
    }

    return (0);
}

person wings of maybe    schedule 26.06.2013    source источник
comment
Попробуйте использовать IDE (может быть, eclipse?) или включите все предупреждения вашего компилятора. Он предупредит вас в нескольких местах. (Например, сравнение в if или ; после if)   -  person Fabian    schedule 27.06.2013
comment
Используйте 1_. Это больше не повторится.   -  person Elazar    schedule 27.06.2013


Ответы (3)


У вас есть ; после if, что вызывает проблему

if (teacher == "y");
{

должно быть

if (teacher == 'y')
{

Также

if (teacher =="n");

должно быть

if (teacher == 'n')

Еще кое-что:

scanf("%d", &teacher);

должно быть

scanf("%c", &teacher);

а затем обратите внимание на изменение == "n" на == 'n'

person karthikr    schedule 26.06.2013
comment
В дополнение к исправлению ; ему, вероятно, также следует что-то сделать со сравнением между целым числом и строкой. - person Crowman; 27.06.2013
comment
я избавился от ; после каждого, но он по-прежнему дает мне те же самые сообщения об ошибках. - person wings of maybe; 27.06.2013
comment
Большое спасибо! Сейчас компилируется. - person wings of maybe; 27.06.2013
comment
Нужна дополнительная помощь... Я получаю правильные ответы для скидки и общей суммы со скидкой, но по-прежнему получаю 0 для налога с продаж и общей суммы. Я потерялся в том, что делать, чтобы исправить это сейчас. - person wings of maybe; 27.06.2013
comment
на правой стороне измените sales_tax на SALES_TAX - person karthikr; 27.06.2013
comment
Вы столкнетесь с той же проблемой и с sales_tax в блоке if. Я позволю вам понять это. - person karthikr; 27.06.2013

Вот что вызывает ваше предупреждение:

if (teacher == "y")

teacher — это int, а "y" — это строка. Вы не можете их сравнивать.

В вашем коде есть много других проблем, в том числе тот факт, что когда вы получаете teacher, в первую очередь, вы запрашиваете символ, но сканируете int.

person Crowman    schedule 26.06.2013

Изменять

if (teacher == "y");

to

if (teacher == 'y');

и изменить

if (teacher == "n");

to

if (teacher == 'n');

"n" или "y" будет массивом символов (строка в C). Таким образом, он обрабатывается как указатель, поэтому вы получаете ошибку, которую получаете.

Кроме того, когда я запустил вашу тестовую программу, сравнение с логикой «y» и «n» сработало, но я просто получаю 0 по всем направлениям. Вам нужно исправить некоторую логику. Я оставлю это вам.

person Dean Knight    schedule 26.06.2013
comment
Я исправил некоторые вещи и получаю правильные ответы для скидки и общей суммы со скидкой, но по-прежнему получаю 0 для налога с продаж и общей суммы. Я теряюсь в том, что делать, чтобы исправить это ... - person wings of maybe; 27.06.2013
comment
Измените sales_tax = purchase_total * sales_tax; на sales_tax = purchase_total * SALES_TAX; и, пожалуйста, попытайтесь понять, что вы делали, когда писали свой собственный код, иначе это бесполезно. Кроме того, в вашем коде для учителей вы даже не пытаетесь рассчитать налог с продаж, поэтому неудивительно, что в этом случае он будет отображаться как ноль. Более удивительно, что ваша программа не падает при попытке напечатать неинициализированные переменные. - person Crowman; 27.06.2013
comment
Огромное спасибо за помощь. Я только неделю назад научился программировать и изо всех сил пытаюсь полностью понять все это, так что спасибо за терпение. - person wings of maybe; 27.06.2013