Бесконечное время L oop неприятностей - PullRequest
0 голосов
/ 01 августа 2020

У меня проблемы с этим, пока я oop, и мне было интересно, может ли кто-нибудь помочь. Я пытаюсь создать небольшую программу отображения меню, которая будет читать вводимые пользователем данные и принимать решения на основе выбора пользователя. Я храню числа, которые пользователь вводит в вектор для методов cal c, которые я создам позже. Я застрял в бесконечном l oop после того, как выбрал печать элементов вектора. У меня также возникли проблемы с чтением пользовательского ввода после ввода выбора. Например, я ввожу «а», и ничего не происходит. Я хочу, чтобы l oop продолжал повторять и отображать параметры меню, пока пользователь не введет Q для выхода.

#include <iostream>
#include <vector>
using namespace std;

//Display function
void display_menu()
{
    cout<< "P - Print number\n"<<"A - Add a number to the list \n"<< "M - Display mean of numbers\n"
        << "S - Display smallest Number\n"<<"L - Display largest number\n"
        << "Q - Quit\n"<<"Please select an option\n";


}

//Decision structure depending on user choice
void user_choice()

{
    display_menu();

    vector<size_t> list{};

    char choice;

    cin>>choice;

    while(choice != 'Q' || choice != 'q'){
            //cout<<"enter another selection\n";

        if(choice == 'P' || choice == 'p')
        {
            if(list.empty())
            {
                cout<< "List is empty\n";
            }
            else
            {

                for(size_t i = 0; i<list.size(); i++)
                {
                    cout<< list[i];
                }
            }

            display_menu();
        }


        else if(choice == 'A' || choice == 'a')
        {
            cout<< "Enter a number to add to the list\n";
            for(size_t i = 0; i <= list.size(); i++)
            {
                //cin>>choice;
                list.push_back(choice);
            }

        }
    }

}
int main()
{
    //cout << "Hello world!" << endl;

    user_choice();
    return 0;
}

1 Ответ

2 голосов
/ 01 августа 2020

Проблема в том, что вы читаете ввод пользователя за пределами l oop (cin>>choice;), поэтому вы читаете предпочтения пользователя, делаете что-то, затем отображаете меню, но тогда вы не перечитываете выбор пользователя поэтому l oop запускается повторно (вы находитесь в while l oop) с тем же значением для choice. Поскольку вы никогда не перечитаете выбор, он никогда не изменится, и ваш l oop никогда не выйдет.

Как отмечает @SamVarshavchik в своих комментариях, у вас есть дополнительная проблема: choice != 'Q' || choice != 'q' всегда истина - например, если choice=='Q', то choice != 'q' истинно, поэтому || истинно. Так что вам также придется это исправить (изменив || на && или сделав tolower и проверив только строчные буквы или что-то подобное, это должно исправить).

...