Простая программа — меню отображается только один раз

Я пытаюсь отследить общее количество купленных продуктов.

В моей программе каждый раз, когда я покупаю яблоки, сыр или хлеб, программа должна продолжать отображать меню снова.

Но он продолжает спрашивать «Сколько яблок?» после того как программа уже подсчитала сумму по яблокам вместо того, чтобы вернуться в меню, чтобы выбрать другой пункт.

Возможно, это связано с типом петли, которую я использовал.

Я застрял на попытке выяснить это. Любая помощь будет оценена.

#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;
}

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 строк, поместите некоторую логику в какую-то другую функцию и просто вызовите эту функцию, разбейте ее на более мелкие части, это будет намного легче читать и также намного легче понять.

1

Другие решения

Да, получите меню в цикле, чтобы отобразить его столько раз, сколько вы хотите, а также, пожалуйста, не забудьте инициализировать ваши переменные в качестве хорошей практики.

Двойной итог = 0,00 // инициализация.

1

По вопросам рекламы [email protected]