ฉันกำลังสร้างโปรแกรมง่ายๆ เพื่อคำนวณยอดขายรวมที่เกี่ยวข้องกับ 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
ใช้ if (something) { มันจะไม่เกิดขึ้นอีก.   -  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
บน RHS เปลี่ยน 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