Saya membuat program sederhana untuk menghitung total penjualan yang melibatkan if/else dan terus mendapatkan pesan kesalahan

Program ini menghitung diskon (jika pelanggan adalah seorang guru) dan pajak penjualan dan menemukan total penjualan. Saya terus mendapatkan kesalahan:

[Peringatan] perbandingan antara pointer dan integer [diaktifkan secara default]

#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 sumber
comment
Coba gunakan IDE (mungkin gerhana?) atau aktifkan semua Peringatan Kompiler Anda. Ini akan memperingatkan Anda di beberapa tempat. (Seperti perbandingan di if atau ; setelah if)   -  person Fabian    schedule 27.06.2013
comment
Gunakan if (something) { . Itu tidak akan terjadi lagi.   -  person Elazar    schedule 27.06.2013


Jawaban (3)


Anda memiliki ; setelah if yang menyebabkan masalah

if (teacher == "y");
{

seharusnya

if (teacher == 'y')
{

Juga

if (teacher =="n");

seharusnya

if (teacher == 'n')

Satu hal lagi:

scanf("%d", &teacher);

seharusnya

scanf("%c", &teacher);

lalu perhatikan perubahan dari == "n" menjadi == 'n'

person karthikr    schedule 26.06.2013
comment
Selain memperbaiki ;, dia mungkin juga harus melakukan sesuatu tentang perbandingan antara bilangan bulat dan string. - person Crowman; 27.06.2013
comment
Saya menyingkirkan; setelah setiap if tetapi masih memberi saya pesan kesalahan yang sama persis. - person wings of maybe; 27.06.2013
comment
Terima kasih banyak! Sekarang sedang dikompilasi. - person wings of maybe; 27.06.2013
comment
Butuh bantuan lebih lanjut... Saya mendapatkan jawaban yang benar untuk diskon dan total diskon, tetapi masih mendapatkan 0 untuk pajak penjualan dan total. Saya bingung apa yang harus dilakukan untuk memperbaikinya sekarang. - person wings of maybe; 27.06.2013
comment
di RHS, ubah sales_tax menjadi SALES_TAX - person karthikr; 27.06.2013
comment
Anda juga akan menghadapi masalah yang sama dengan sales_tax di blok if. Saya akan membiarkan Anda memikirkannya. - person karthikr; 27.06.2013

Inilah yang menyebabkan peringatan Anda:

if (teacher == "y")

teacher adalah int - "y" adalah string. Anda tidak dapat membandingkannya.

Ada banyak masalah lain dalam kode Anda, termasuk fakta bahwa ketika Anda mendapatkan teacher, Anda meminta karakter, tetapi memindai int.

person Crowman    schedule 26.06.2013

Mengubah

if (teacher == "y");

to

if (teacher == 'y');

dan berubah

if (teacher == "n");

to

if (teacher == 'n');

"n" atau "y" akan menjadi array karakter (string dalam C). Karena itu ini diperlakukan seperti sebuah penunjuk, itulah sebabnya Anda mendapatkan kesalahan yang Anda dapatkan.

Selain itu, saat saya menjalankan program pengujian Anda, perbandingan dengan logika 'y' dan 'n' berhasil, tetapi saya hanya mendapatkan nilai 0 secara keseluruhan. Anda perlu memperbaiki beberapa logika. Aku serahkan itu padamu.

person Dean Knight    schedule 26.06.2013
comment
Saya memperbaiki beberapa hal dan saya mendapatkan jawaban yang benar untuk diskon dan total diskon, tetapi masih mendapatkan 0 untuk pajak penjualan dan total. Saya bingung apa yang harus saya lakukan untuk memperbaikinya... - person wings of maybe; 27.06.2013
comment
Ubah sales_tax = purchase_total * sales_tax; menjadi sales_tax = purchase_total * SALES_TAX; dan coba pahami apa yang Anda lakukan saat menulis kode Anda sendiri, jika tidak, maka percuma saja. Selain itu, dalam kode Anda, untuk guru, Anda bahkan tidak mencoba menghitung pajak penjualan, jadi tidak mengherankan jika pajak tersebut akan ditampilkan sebagai nol. Lebih mengejutkan lagi bahwa program Anda tidak crash karena mencoba mencetak variabel yang tidak diinisialisasi. - person Crowman; 27.06.2013
comment
Terima kasih banyak atas bantuannya. Saya baru belajar cara memprogram seminggu yang lalu dan saya kesulitan untuk memahami semuanya sepenuhnya, jadi terima kasih telah bersabar. - person wings of maybe; 27.06.2013