结束 while 循环,继续要求输入字符串,直到我输入 -1

End a while loop that continue ask for string input until I enter -1

我必须创建一个包含项目名称的菜单,我可以使用 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 循环。

无论何时你想退出循环,你都可以使用 break 关键字。

for(int i = 0; i < MAX; i++){
    if(i > 10){
        break;
    }
    doWork();
}

您可以将 for 循环转换为其他循环。例如:

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

同时

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

do-while

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

要控制循环,请使用 continuebreak 关键字。关键字 continue 将跳过循环的当前迭代,而 break 将退出循环。这些通常以 if 语句为条件。

如果我没理解错的话,应该是这样的:

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++;
}

或使用中断:

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++;
}

我是用指针得到的哈哈。

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;
}
}
}