Как я могу остановить цикл и перейти к другим моим заявлениям?

0

Я хочу сделать программу, которая отслеживает количество проданных компакт-дисков. И я хочу знать, кто является бестселлером. 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";
    }
}
  • 2
    Ищите break .
  • 1
    И switch и operator++ , ...
Теги:
while-loop

4 ответа

0
Лучший ответ

РЕДАКТИРОВАТЬ:

Спасибо @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 происходит каждый раз, когда повторяется цикл (Итерация в Википедии).

  • 0
    Спасибо за помощь! :) но когда я попытался запустить ваш код, он дал мне ошибку. Он говорит: «[Ошибка] ожидал неквалифицированного идентификатора перед« время »»? Хотя я все еще пытаюсь пересмотреть свой собственный код на основе ваших предложений. Еще раз спасибо.
  • 0
    Вы забыли поместить все это в main() ? stackoverflow.com/questions/8690446/...
0

Поэтому добавьте опцию 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.

0

Разрешите пользователю все, что он закончил, с помощью ввода:

//...
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);  
0
while (counter <= 100 || result == -1)
{...}

вы можете предложить пользователю ввести -1, если они закончены.

Или же вы можете использовать переключатель, например:

bool stop = false;
while (counter <= 100 || stop)
{
  switch(result)
  {
     case 1: ...;
     case 2: ...;
     .
     .
     .
     default:
       stop = true;
  }
}

если пользователь вводит значение, отличное от [1, 7], он выйдет из цикла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню