Я хочу сделать программу, которая отслеживает количество проданных компакт-дисков. И я хочу знать, кто является бестселлером. CD классифицируются как альтернативная музыка классическая, страна, танец, поп, рок и R & B
Я сделал программу, управляемую меню, которая будет отображать музыкальные жанры, но здесь моя проблема: я не знаю, как пользователь может продолжать вводить количество жанров проданной музыки, пока он не захочет ее остановить. И после того, как он остановился, как он может сообщить о том, сколько CD было продано для каждого жанра? В основном пользователь будет продолжать подсчитывать количество проданных компакт-дисков, пока он не захочет остановить продажи.
#include<iostream>
using namespace std;
int main ()
{
int counter = 1;
int result, Alternative = 0, Classical = 0, Country = 0, Dance = 0, Pop = 0, Rock = 0, RnB = 0;
cout << "Choose the music genre sold (Only choose the numbers): \n1. Alternative\n";
cout << "2. Classical\n3. Country\n4. Dance\n5. Pop\n6. Rock\n7. R&B\n\t\t\t\t\t\t\t";
while (counter <= 100)
{
cin>>result;
if(result == 1)
{
Alternative = Alternative + 1;
}
else if(result == 2)
{
Classical = Classical + 1;
counter++;
}
else if(result == 3)
{
Country = Country + 1;
counter++;
}
else if(result == 4)
{
Dance = Dance + 1;
counter++;
}
else if(result == 5)
{
Pop = Pop + 1;
counter++;
}
else if (result == 6)
{
Rock = Rock + 1;
counter++;
}
else if (result == 7)
{
RnB = RnB + 1;
counter++;
}
cout<<"\nAlternative:"<<Alternative;
cout<<"\tClassical:"<<Classical;
cout<<"\tCountry: "<<Country<<"\n";
cout<<"Dance: "<<Dance;
cout<<"\tPop: "<<Pop;
cout<<"\tRock: "<<Rock;
cout<<"\tR&B: "<<RnB<<"\t\t\t";
}
}
Спасибо @timrau и @sfjac за предложения break
, switch
и variable++
.
Вместо того, чтобы в while
циклы остановки после фиксированного числа (100) итераций [1], вы можете попросить пользователя ввести определенный символ или номер, когда он сделал.
Рассмотрим следующий код, например:
// assume you have already declared and initialized all the required variables, as in your example.
// for now we will say that this is -1, so that it doesn't count as a valid option, and so it passes our while condition.
int result = -1;
while (result) // condition evaluates to FALSE if user enters zero.
{
// print out the menu.
cout << "The menu goes here... " << endl
<< "Press 0 (zero) when you are done.";
// get the input.
cin >> result;
// use switch to check against constant values. Its cleaner.
switch (result)
{
case 1: Alternative++; // For incrementing variables, use the ++ operator.
break;
case 2: Classical++;
break;
// and so on, for all your choices.
// And then,
default: cout << "Oops! That wasn\'t a valid choice. Try again..." << endl;
}
}
// now the user is done, and has entered 0.
cout << "\nAlternative: " << Alternative
<< "\tClassical: " << Classical
<< "\tCountry: " << Country << "\n"
<< "Dance: " << Dance
<< "\tPop: " << Pop
<< "\tRock: " << Rock
<< "\tR&B: " << RnB << "\t\t\t";
// and yes, you can fold your cout like that, so you don't have to type "cout" every time.
Надеюсь, что это помогло :-)
[1] iteration
происходит каждый раз, когда повторяется цикл (Итерация в Википедии).
main()
? stackoverflow.com/questions/8690446/...
Поэтому добавьте опцию quit для вашего cout:
cout << "2. Classical\n3. Country\n4. Dance\n5. Pop\n6. Rock\n7. R&B\n8. quit
Добавьте новое условие (здесь лучше выбрать переключатель) в вашем цикле while:
else if(result == 8) {
break;
}
Также в вашем первом случае, если вы должны увеличить выбор, то есть в случае альтернативы. Лучше всего будет увеличивать выбор после того, как вы прочитаете значение только один раз вместо дублирования в любых условиях.
И ваш cout, который печатает жанр внутри цикла while, должен быть после конца цикла, т.е. до последней скобки, т.е. конца main.
Разрешите пользователю все, что он закончил, с помощью ввода:
//...
cout << "...7. R&B\n999.End input \t\t\t\t\t\t\t";
do {
// all your statements
} while (result!= 999);
Лично я бы начал нумерацию с 0 для конца ввода, а затем остальную часть возможных вариантов. Пользователь может быстро увидеть, как остановиться, а затем вы можете написать while (result)
. Но это дело вкуса.
Некоторые другие предложения:
Рассмотрите возможность switch
вместо вашей длинной, if...else...
цепочки. Или лучше здесь, подумайте об использовании массива, чтобы избежать повторяющегося кода:
int genre[8]={}; // create ainitalised array
//... as above
do {
cin>>result;
if (result>=0 && result<8) {
genre[result]++;
counter++;
}
else if (result!=999)
cout <<"Wrong value entered!\n";
} while (result!= 999);
while (counter <= 100 || result == -1)
{...}
вы можете предложить пользователю ввести -1, если они закончены.
Или же вы можете использовать переключатель, например:
bool stop = false;
while (counter <= 100 || stop)
{
switch(result)
{
case 1: ...;
case 2: ...;
.
.
.
default:
stop = true;
}
}
если пользователь вводит значение, отличное от [1, 7], он выйдет из цикла.
break
.switch
иoperator++
, ...