#c
#c
Вопрос:
Как мне получить переменную total, чтобы получать каждую цену каждый раз, когда программа запускается? Ожидаемые значения — это общее количество для каждого введенного числа, сложенного вместе, и каждое число имеет определенное значение. Я не получаю никаких выходных данных, когда вводится число 8, которое должно печатать и завершать цикл.
#include <iostream>
using namespace std;
int main() {
int option;
double one = 17.50;
double two = 12.95;
double thre = 11.56;
double four = 7.99;
double five = 15.00;
double six = 9.99;
double total = 0;
do{
cout<<"**************************************BRAINS!**************************************"<<endl;
cout<<"**************************************Menu**************************************"<<endl;
cout<<"1) Thalamustard-Crusted Filet - $17.50"<<endl;
cout<<"2) Hypothamoussaka - $12.95"<<endl;
cout<<"3) Amyg-DAL-a - $11.56"<<endl;
cout<<"4) CHIPpocampus amp; Dip- $7.99"<<endl;
cout<<"5) Pons Pasta Special - $15.00"<<endl;
cout<<"6) Medulla Frittata - $9.99"<<endl;
cout<<"7) Finish Current Sale Start a New Sale"<<endl;
cout<<"8) Quit Forever - APOCALYPSE"<<endl;
cin>>option;}
while ( option <= 8 amp;amp; option > 0);
while(option <= 0){
if (option == 1){
double total = total one;
}
else if (option == 2){
double total = total two;
}
else if (option == 3){
double total = total thre;
}
else if (option == 4){
double total = total four;
}
else if (option == 5){
double total = total five;
}
else if (option == 6){
double total = total six;
}
else if (option == 7){
double total = total (total*0.06);
}
else{
cout<<"HURRY UP!";
}
if (option == 8){
cout<<"Your total is: $"<<total; //This does not print or accumulate
}
}
}
Комментарии:
1. Измените все
double total = total ...
наtotal = total ...
. В противном случае вы затеняете фактический накопительtotal
.2. Вы говорите, что она не печатается и не накапливается. Что это значит? Он вообще ничего не печатает? Или просто 0? Какой результат вы получаете? @cigien уже нашел основную проблему, но я думаю, что ваша проверка ввода также неверна, она будет повторяться до тех пор, пока
option
находится между 0 и 8, т. Е. До тех пор, пока ввод действителен?3. Первый цикл прерывается только тогда, когда пользователь вводит недопустимый элемент меню. И второй цикл будет выполняться только в том случае, если
option
значение недопустимо (точнее, равно или меньше нуля), и тогда он будет выполняться вечно. Подумайте об этой логике некоторое время и попытайтесь объяснить это своей резиновой утке .4. Я что-то упускаю — как это когда-либо печатает какие-либо выходные данные? Вы выходите из цикла ввода только при вводе меньше 1 или больше 8, затем вы зависнете в следующем цикле, если ваш ввод меньше 1. Единственный способ чисто выйти из этой программы — ввести 9 или больше.
5. Просмотрите
switch
инструкцию.
Ответ №1:
Каждый раз, когда вы создаете новую локальную итоговую переменную в строках
double total = total one;
и это не меняет фактическое total
значение. Изменение этой строки на
total = one; //or two....
может решить эту проблему.
Ответ №2:
Почему ваш код не работает
посмотрите на эквивалент кода
do{
// print measseges
cin>>option;
} while (option <= 8 amp;amp; option > 0);
while(option<=0){
// decode the option meaning
}
код будет повторяться в первом цикле (вывод сообщения и получение входных данных) и завершит цикл, когда option
переменная будет больше 8 или нулевого значения
-
если первый цикл заканчивается на
option
is positve (больше 8), то второй цикл никогда не завершится, и программа завершится без какого-либо ответа!! -
второй цикл будет выполняться только тогда, когда
option
переменная имеет отрицательное значение… и в этом случае это приведет к бесконечному циклу>>> только else statment будет сохраняться навсегда.
итак, здесь у вас есть две основные ошибки
- значение
option
во втором цикле (если первый цикл завершается с отрицательным значением) всегда отрицательно, поэтому отсутствие вашейif
проверки состояния имеет значение - вы объявляете общую переменную многократно
и эта проблема может быть решена с помощью следующего кода :
#include <iostream>
using namespace std;
int main() {
int option;
double one = 17.50;
double two = 12.95;
double thre = 11.56;
double four = 7.99;
double five = 15.00;
double six = 9.99;
double total = 0;
do {
cout << "**************************************BRAINS!**************************************" << endl;
cout << "**************************************Menu**************************************" << endl;
cout << "1) Thalamustard-Crusted Filet - $17.50" << endl;
cout << "2) Hypothamoussaka - $12.95" << endl;
cout << "3) Amyg-DAL-a - $11.56" << endl;
cout << "4) CHIPpocampus amp; Dip- $7.99" << endl;
cout << "5) Pons Pasta Special - $15.00" << endl;
cout << "6) Medulla Frittata - $9.99" << endl;
cout << "7) Finish Current Sale Start a New Sale" << endl;
cout << "8) Quit Forever - APOCALYPSE" << endl;
cin >> option;
if (option == 1) {
total = total one;
}
else if (option == 2) {
total = total two;
}
else if (option == 3) {
total = total thre;
}
else if (option == 4) {
total = total four;
}
else if (option == 5) {
total = total five;
}
else if (option == 6) {
total = total six;
}
else if (option == 7) {
total = total (total * 0.06);
}
else if (option == 8) {
cout << "Your total is: $" << total;
breack;
}
else {
cout << "not valied input";
}
} while (option <= 8 amp;amp; option > 0);
}
советы по кодированию для лучшего чтения
- вы могли бы инкапсулировать меню печати в другую функцию
- используйте
switch
statment, а неif
это сделает его намного более понятным для чтения do while
является ли suck использоватьwhile
цикл с истинным условием сначала- вы можете использовать массив, а не дискретную переменную для сохранения константы
ищите следующий код, он намного красивее после применения этих простых приемов
#include <iostream>
using namespace std;
void printMenu();
int main() {
int option =0;
double one = 17.50;
double two = 12.95;
double thre = 11.56;
double four = 7.99;
double five = 15.00;
double six = 9.99;
double total = 0;
cout << "**************************************BRAINS!**************************************" << endl;
while(option != 8)
{
printMenu();
cin >> option;
switch (option)
{
case 1:total = one;break;
case 2:total = two;break;
case 3:total = thre;break;
case 4:total = four;break;
case 5:total = five;break;
case 6:total = six;break;
case 7:
cout << "Your total is" << total << " $n starting new sale ... n";
total =0;
break;
case 8:
cout << "Your total is: " << total << " $ n"<<"End of the program";
break;
default:
cout << "you entered "<<option<<"and this is not a valid option please try agiann";
break;
}
}
}
void printMenu() {
cout << "**************************************Menu**************************************" << endl;
cout << "1) Thalamustard-Crusted Filet - $17.50" << endl;
cout << "2) Hypothamoussaka - $12.95" << endl;
cout << "3) Amyg-DAL-a - $11.56" << endl;
cout << "4) CHIPpocampus amp; Dip- $7.99" << endl;
cout << "5) Pons Pasta Special - $15.00" << endl;
cout << "6) Medulla Frittata - $9.99" << endl;
cout << "7) Finish Current Sale Start a New Sale" << endl;
cout << "8) Quit Forever - APOCALYPSE" << endl;
}
Комментарии:
1. Вы могли бы объявить
const char
массив, содержащий меню, а затем использоватьstd::cout.write()
для переноса текста на консоль. Сначала измените все этоendl
наn
.2. Цены должны быть объявлены как
const double
, поскольку их значения не меняются после объявления.