2017-01-07 7 views
-1

, поэтому я писал программу кассового аппарата. Я делал в основном все. Моя программа почти закончена. Но у меня есть одна проблема. Эта программа просит пользователя выбирать продукты и вычислять общую сумму в конце, если пользователь хочет пойти на takeout.but, когда пользователь должен ввести наличные деньги для оплаты, я сталкиваюсь с проблемой. Если наличные деньги, предоставленные пользователем, больше, чем общая сумма продуктов, которые пользователь выбрал для покупки, он вычисляет и возвращает пользователю изменение, но если денежные средства, предоставленные пользователем, меньше, чем общее количество продуктов, выбранных пользователем, оно должно отображать «Недостаточное количество данных. Добавить больше». Но вместо этого оно отображает целочисленное значение в отрицательной форме .it отображает изменение в отрицательной форме. Я привел пример вывода в bottom.please, помогите me.its так fraustrating. '<' оператор, похоже, не работает.! =, ==,> отлично работает. Спасибо!'<' не работает в заявлении

#include <stdio.h> 
#include<conio.h> 
#include<stdlib.h> 

int main() 
{ 
int a=8,b=10,c=20,d=50,e=30,x,subtotal1=0,subtotal2=0,subtotal3=0,subtotal4=0,subtotal5=0,shopping=1,cash; 
int total=subtotal1+subtotal2+subtotal3+subtotal4+subtotal5; 
char choice,code,choice2; 
printf("           WELCOME TO KFC!   \n"); 
printf("Here are our sample list of products you might be interested in.\n\n"); 
while(shopping) 
{ 
    printf("\nChoose your product Enter product code i.e:A,C etc\n\n"); 
    printf("[A]\n"); 
    printf("[B]\n"); 
    printf("[C]\n"); 
    printf("[D]\n"); 
    printf("[E]\n"); 
    printf("[Q] for Quitting\n\n"); 




    code=getch(); 

    if(code=='q' || code=='Q')exit(0); 

    if(code=='a' || code=='A') 
    { 
     printf("You have chosen 'A' and price is 8$\n\n"); 
     printf("Enter Quantity:\n\n"); 
     scanf("%d",&x); 
     subtotal1=a*x; 
     printf("Subtotal price is %d\n\n",subtotal1); 
    } 
    if(code=='b' || code=='B') 
    { 
     printf("You have chosen 'B' and price is 10$\n"); 
     printf("Enter Quantity:\n"); 
     scanf("%d",&x); 
     subtotal2=b*x; 
     printf("Subtotal price is %d\n",subtotal2); 
    } 
    if(code=='c' || code=='C') 
    { 
     printf("You have chosen 'C' and price is 20$\n"); 
     printf("Enter Quantity:\n"); 
     scanf("%d",&x); 
     subtotal3=c*x; 
     printf("Subtotal price is %d\n",subtotal3); 
    } 
    if(code=='d' || code=='D') 
    { 
     printf("You have chosen 'D' and price is 50$\n"); 
     printf("Enter Quantity:\n"); 
     scanf("%d",&x); 
     subtotal4=d*x; 
     printf("Subtotal price is %d\n",subtotal4); 
    } 
    if(code=='E' || code=='e') 
    { 
     printf("You have chosen 'E' and price is 30$\n"); 
     printf("Enter Quantity:\n"); 
     scanf("%d",&x); 
     subtotal5=e*x; 
     printf("Subtotal price is %d\n",subtotal5); 
    } 

    printf("Do you want to shop more?\n"); 
    choice=getch(); 

    if(choice=='y' || choice=='Y')shopping=1; 
    else if(choice=='n' || choice=='N') 
    { 
     total=subtotal1+subtotal2+subtotal3+subtotal4+subtotal5; 
     printf("Do you want to add them to takeout?\n\n"); 
     choice2=getch(); 
     if(choice2=='y' || choice2=='Y') 
     { 

      printf("Enter cash:\n"); 
      scanf("%d",&cash); 
      total=subtotal1+subtotal2+subtotal3+subtotal4+subtotal5; 
      if(total < ("%d",&cash)) 
      { 
       printf("You have given %d\n",cash); 

       printf("Your change is %d\n",cash-total); 
      } 
      else printf("Insufficient amount given.Add more.\n"); 

      shopping=0; 
     } 
     else shopping=1; 
    } 

}  

} 


             WELCOME TO KFC! 
Here are our sample list of products you might be interested in. 


Choose your product Enter product code i.e:A,C etc 

[A] 
[B] 
[C] 
[D] 
[E] 
[Q] for Quitting 

You have chosen 'A' and price is 8$ 

Enter Quantity: 

12 
Subtotal price is 96 

Do you want to shop more? 
Do you want to add them to takeout? 

Enter cash: 
90 
You have given 90 
Your change is -6 

Но он должен показать

"Недостаточное количество given.Add более"

это не делает that.why?

+1

Вы слишком задумываетесь об этом ... 'total <("% d ", & cash)' бессмысленно, просто сделайте 'total JJJ

+2

@JJJ, но художественное использование недооцененного оператора запятой! Кроме того, любой здравомыслящий компилятор * должен * выдать предупреждение для этой строки, так как это нарушение ограничения. – EOF

+1

Если ваш компилятор C дает вам предупреждение, значит, он обнаружил ошибку в вашем коде. Это означает, что вам нужно исправить код, чтобы не было никаких предупреждений, и вы не исправляете их, похлопывая по всему миру. Так говорит ваш код. Спросите, как исправить предупреждения и что означает это предупреждение. Ваша цель должна заключаться в компиляции без предупреждения по строгим предупреждениям. –

ответ

3

В коде

if(total < ("%d",&cash)) 

неправильно. Он не делает ничего значимого. Вы можете написать

if(total < cash) 

FWIW, if(total < ("%d",&cash)) компилирует, потому что нет никакой ошибки синтаксиса, это использует свойство comma operator который использует только операнд RHS в качестве результата.

Однако, поскольку код содержит нарушение ограничений для реляционного оператора, в соответствии с главой § 6.5.5, C11, этот код вызывает неопределенное поведение.

+0

Нарушение ограничения * требует * диагностического сообщения от компилятора. – EOF

+0

@EOF Правильно, но в случае, если компилятор решил продолжить компиляцию и создать двоичный код с этим кодом, поведение UB, правильно? –

+0

Да. Дело в том, что OP * должен был упомянуть предупреждение компилятора *. – EOF

 Смежные вопросы

  • Нет связанных вопросов^_^