Я пытаюсь отследить общее количество купленных продуктов.
В моей программе каждый раз, когда я покупаю яблоки, сыр или хлеб, программа должна продолжать отображать меню снова.
Но он продолжает спрашивать «Сколько яблок?» после того как программа уже подсчитала сумму по яблокам вместо того, чтобы вернуться в меню, чтобы выбрать другой пункт.
Возможно, это связано с типом петли, которую я использовал.
Я застрял на попытке выяснить это. Любая помощь будет оценена.
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main()
{
double BUDGET;
const double apple= .60;
const double lb_cheese= 1.60;
const double loaf_bread = 2.50;
double total;
int count;
char choice;
double amount_left;
cout <<"Welcome! What is the budget for your picnic lunch?"<< endl;
cin>> BUDGET;
cout<<"Choose one of the following"<<endl;
cout<<"-------------------------------------"<<endl;
cout<<" MENU \n "<<endl;
cout<<"A-Apple B-Cheese C-Bread"<<endl;
cout<<" $0.60 $1.50 $2.50 "<<endl;
cout<<"-------------------------------------"<<endl;
cin>> choice;while ((choice != 'Q') && (total <BUDGET)) //Q is the sentinel value to "quit" the program
{switch(choice)
{
case 'A':
case 'a':
cout<<"How many apples?";
cin>> count;
total+= (count *apple);
break;case 'B':
case 'b':
cout<<"How many pounds of cheese ?";
cin>> count;
total+= (count* lb_cheese);
break;case 'C':
case 'c':
cout<<"How many loafs of bread?";
cin>> count;
total+= (count * loaf_bread);
break;default:
cout<<"The entry you have entered is not valid, please try again."<<endl;
}if( total > BUDGET)
{ cout<<"You have exceeded your budget please check your cart.\n\n";
break;
}cout<<"Your total is: $"<<setprecision((2))<<fixed<<total<<endl;
amount_left= BUDGET-total;
cout<<"You have $"<<setprecision(2)<<fixed<<amount_left<<" left to spend."<<endl;}
return 0;
}
Отображение меню вышло из цикла:
display menu
read option
while (option != quit) {
do some calculations
}
и поэтому меню отображается только один раз. Вы можете изменить это на бесконечный цикл:
while (true) {
display menu
read option
if (choice == 'Q' || total >= BUDGET)
break;
do some calculations
}
Также старайтесь избегать написания функций, которые длиннее 50 строк, поместите некоторую логику в какую-то другую функцию и просто вызовите эту функцию, разбейте ее на более мелкие части, это будет намного легче читать и также намного легче понять.
Да, получите меню в цикле, чтобы отобразить его столько раз, сколько вы хотите, а также, пожалуйста, не забудьте инициализировать ваши переменные в качестве хорошей практики.
Двойной итог = 0,00 // инициализация.