【问题标题】:End a while loop that continue ask for string input until I enter -1结束一个继续询问字符串输入的while循环,直到我输入-1
【发布时间】:2019-06-22 06:42:26
【问题描述】:

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

【问题讨论】:

    标签: c++ arrays string codeblocks


    【解决方案1】:

    如果我理解正确,这样的事情应该可以工作:

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

    【讨论】:

    • 您好,谢谢!我可以用指针找出来,但我也将 -1 存储为字符串之一,你的解决了这个问题!
    • 我建议快速清理一下:cin.getline(input, 20); 不会编译。 This particular form of getline will not accept a std::stringmenu_list[i] = input; 也不起作用。您不能将 std::string 分配给 char 数组。要么使用std::getline 并在整个过程中指定std::string(非常优越的选项),要么忍受所有char 数组(Superyuck)。
    【解决方案2】:

    当您想退出循环时,可以使用break 关键字。

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

    【讨论】:

    • 你也可以在while循环中使用break
    【解决方案3】:

    我可以用指针得到它,哈哈。

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

    【讨论】:

      【解决方案4】:

      您可以将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);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        相关资源
        最近更新 更多