Завершить цикл while, который продолжает запрашивать ввод строки, пока я не введу -1 - PullRequest
0 голосов
/ 22 июня 2019

Мне нужно создать меню, содержащее имена элементов, я могу сделать это с помощью цикла for, который заканчивается, пока не будет достигнут максимум, но как мне сделать это с циклом while, который будет продолжать спрашивать, пока не будет достигнут максимум или я ввожу -1

Я попытался использовать цикл for, и он сработал, но я должен использовать цикл while, который может остановиться, когда я скажу ему остановиться.

#include <iostream>

using namespace std;

void read_in_menu(char menu_list[][50], float price_list[], int& num_menu_items,
                  int MAX_MENU_ITEMS);

int main()
{
    const int MAX_MENU_ITEMS = 5;
    char menu_list[MAX_MENU_ITEMS][50];
    float price_list[MAX_MENU_ITEMS];
    int num_menu_items;

    read_in_menu(menu_list, price_list, num_menu_item, MAX_MENU_ITEMS);
}

void read_in_menu(char menu_list[][50], float price_list[], int& num_menu_items,
                  int MAX_MENU_ITEMS)
{
    for (int i = 0; i < MAX_MENU_ITEMS; i++)
    {
        cout << "Enter Names: ";
        cin.getline(menu_list[i], 20);
    }
}

Я хочу использовать цикл while, который будет продолжаться, пока я не введу -1 или не достигну максимума. Я хочу остановить цикл while, когда захочу, вместо цикла for, где мне нужно достичь максимума.

Ответы [ 4 ]

0 голосов
/ 22 июня 2019

Я смог получить его с указателем LOL.

void read_in_menu(char menu_list[5][20], float price_list[], int &num_menu_items, int MAX_MENU_ITEMS){
int i = 0;
char *p = "-1";
while(i<MAX_MENU_ITEMS){
cout << "Enter Name" << endl;
cin.getline(menu_list[i],20);
if(strcmp(menu_list[i], p)){
i++;
}else{
break;
}
}
}
0 голосов
/ 22 июня 2019

Вы можете преобразовать цикл for в другие циклы. Например:

Для

for(int i = 0; i < 10; i++)
    DoSomething();

В то время как

int i = 0;
while(i < 10){
    DoSomething();
    i++;
}

делать-то время

int i = 0;
do{
    DoSomething();
    i++;
}
while(i < 10);

Для управления циклами используйте ключевые слова continue и break. Ключевое слово continue пропустит текущую итерацию цикла, а break выйдет из цикла. Это обычно обусловлено if утверждением.

0 голосов
/ 22 июня 2019

Если я правильно понимаю, что-то вроде этого должно работать:

int i = 0;
string input = "";
while(i < MAX_MENU_ITEMS || input == "-1") {
    cout << "Enter Names: ";
    cin.getline(input, 20);
    if(input != "-1") { //to avoid setting menu_list[i] = "-1"
        menu_list[i] = input;
    }
    MAX_MENU_ITEMS++;
}

или с помощью break:

int i = 0;
string input = "";
while(i < MAX_MENU_ITEMS) {
    cout << "Enter Names: ";
    cin.getline(input, 20);
    if(input == "-1") { 
        break;
    }
    menu_list[i] = input;
    MAX_MENU_ITEMS++;
}
0 голосов
/ 22 июня 2019

Всякий раз, когда вы хотите выйти из цикла, вы можете использовать ключевое слово break.

for(int i = 0; i < MAX; i++){
    if(i > 10){
        break;
    }
    doWork();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...