Я пытаюсь создать меню, но мой код продолжает цикл - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь создать меню, в котором пользователь выбирает номер для выполнения функции, но мой код продолжает цикл. Мой двумерный массив поддерживает циклические операторы даже за пределами l oop Я нашел способ остановить l oop с помощью

        cout << endl;
        cout << "Enter another number or press -1 to exit: ";
        cin >> userNum; 

Но затем я протестировал его с помощью простого оператора cout (раздел usernum == 3), и это тоже зацикливается. Я не уверен, что я делаю не так? Я думаю, что это связано с моим временем, но я не уверен. Буду признателен за любую помощь !!

     #include <iostream>
     #include <string>
     #include <ctime>
     using namespace std;
     // function #1, finds the minimum value in a array
     int findMin(int a[], int size){
int i;
int min;
min = a[0];
for (i = 1; i < size; ++i) {
    if(min > a[i]){
            min = a[i];
    }
}
return min;
} 
 // will write other functions later
int main()
{
int userNum = 0;
int arraySize = 4;
int array[arraySize];
int i;
int j;

int rowSize = 3;
const int colSize = 4;
int array2[rowSize][colSize];

cout << "MENU" << endl;
cout << "-1: exit" << endl;
cout << "1: minimum value of integer array" << endl;
cout << "2: computes the average of all elements in a 2D array" << endl;
cout << "3: Is it a leap year?" << endl;
cout << "4: calculates addition, subtraction, multiplation, divison" << endl;
cout << "5: read a text file and store each word into a vector of string" << endl;
cout << "6: count the frequency of each word" << endl;

ll

cout << "7: remove all the stop words from words" << endl;
cout << "Please input a number from the menu:" << endl;
cin >> userNum;

while (userNum != -1) {

    if (userNum == 1) {

        cout<<"Enter 4 array elements: ";
            for(i=0; i< arraySize; i++){
                cin>>array[i];
            }
        cout << "minimum value of integer array: " << findMin(array, arraySize) << endl;
        cout << "Enter another number or press -1 to exit: ";
        cin >> userNum;
    }

    else if (userNum == 2) {
        cout << "here are the elements in the 2d array.";

        for (i=0; i < rowSize; i++ ){
            cout<< endl;
            for (j =0; j < colSize; j=j+1){
                array2[i][j] = 1+(rand()%9);
                cout << array2[i][j] << " ";
            }
    }
        cout << endl;
        cout << "Enter another number or press -1 to exit: ";
        cin >> userNum;
    }

    else if (userNum == 3){
        cout << "hahah" << endl;
    }

l

     else {
        cout << "Enter another number or press -1 to exit: ";
        cin >> userNum;
    }
}
cout << "exited";
return 0;
}

1 Ответ

1 голос
/ 28 января 2020

Ваш userNum == 3 регистр не считывается в новом userNum, поэтому он зацикливается. Если userNum равно 3, оно никогда не изменится.

Один из способов исправить это - переместить код «получить пользовательский ввод» в отдельную функцию, а затем просто вызвать его в конце вашего l * 1010. *. Таким образом, вам не нужно повторять код повсюду, и вы не забудете добавить его при реализации нового дела.

Примерно так:

int getMenuItem()
{
    cout << "MENU" << endl;
    cout << "-1: exit" << endl;
    cout << "1: minimum value of integer array" << endl;
    cout << "2: computes the average of all elements in a 2D array" << endl;
    cout << "3: Is it a leap year?" << endl;
    cout << "4: calculates addition, subtraction, multiplation, divison" << endl;
    cout << "5: read a text file and store each word into a vector of string" << endl;
    cout << "6: count the frequency of each word" << endl;
    cout << "7: remove all the stop words from words" << endl;
    cout << "Please input a number from the menu:" << endl;
    int input;
    cin >> input;
    return input;
}

int main()
{
    ...
    userNum = getMenuItem();  // <- Before the loop, to get the initial selection

    while (userNum != -1) {
        if (userNum == 1) {
            ...
        }
        else if (userNum == 2) {
            ...
        }
        else if (userNum == 3) {
            ...
        }

        userNum = getMenuItem();  // <- At the end of the loop, to get the next
    }
    cout << "exited";
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...