【问题标题】:C++ function that returns value into switch statement [closed]将值返回到 switch 语句的 C++ 函数
【发布时间】:2014-03-09 03:18:02
【问题描述】:

目前我有一个工作程序,但正在尝试不同的方法来查看它们是否有效。下面是我试图开始工作的代码,但有一个要求用户做出选择的功能。我想将该值返回到我的主函数中,该函数将运行一个包含案例的 do while 循环。最初我将它作为 if else if 语句,但如果可能的话想减少它。下面是我正在使用的代码。运行程序时,它只返回整个菜单,而不是从应该返回的值运行函数。

 {
        int choice;
        createEmptySeats();
        seatPrice();

        do {
            choice = menu();
            switch (choice)
            {
            case '1': 
                reserveSeat();
                break;
            case '2': 
                displayInfo();
                break;
            case '3': 
                DisplaySummary();
                break;
            case '4': 
                break;
            }
        }
        while (!seatFull());

        return 0;
    }


        int menu() 
        {
            int userSelection = -1;
            while (userSelection < 1 || userSelection > 4) 
            {
                cout << "Please Choose Option Below" << endl;
                cout << "1: Reserve Seat(s)"<<endl;
                cout << "2: Display Available Seats" << endl;
                cout << "3: Display Information:" << endl;
                cout << "4: Exit System" << endl;
                cin >> userSelection;
            }
            return userSelection;
        }

【问题讨论】:

  • 错字?您需要在每个新的 case 之前添加 break; 语句,否则它将落入下一个 case
  • 这确实是正确的答案,除非失败行为是您想要的。
  • 如果userSelection = 0 那么会发生什么,另外你忘记了break; 在每个案例之后的声明。您可能也有default 案例。
  • 我在每个案例之后添加了中断。我确实忘记了,但它仍然没有返回一个函数,而是它只是再次给我菜单。
  • @user3397512 :您必须在每个案例之后添加break;

标签: c++ function switch-statement do-while


【解决方案1】:

首先:您在每个案例的 switch 语句中都缺少 break;,但案例 4 除外(不确定它是否是设计使然)。

第二个:选择是int,你的案例是chars。更改其中一个,使它们都匹配。你永远找不到适合你的情况的匹配项,所以你只是继续循环。

【讨论】:

  • Noobacode。这就是我现在所拥有的,但它正在重新加载菜单。我猜 userSelection 没有通过,但不确定如何测试。
  • @user3397512 重新加载哪个菜单?有很多事情会出错,你可能永远不会从你的 seatFull() 函数返回一个 true,所以我们没有办法在没有看到代码的情况下知道发生了什么。
  • @user3397512 好吧,您将继续运行该函数,而 do{}while() 将按照您设计的方式继续运行。该循环将继续运行,直到您的 seatFull() 返回 true。
  • 对不起,我没有发布整个代码,只是出错的部分。我最初的声明是 int main() { createEmptySeats();座位价格(); while (!seatFull()) { int ch = menu(); if (ch == 1) { reserveSeat(); } else if (ch == 2) { displayInfo(); } else if(ch==3) { DisplaySummary(); } 否则 if(ch==0) { 休息; } } // 系统(“暂停”);返回0; } 我试图只更改为 switch 语句。
  • @user3397512 查看我的编辑以了解正在发生的事情。
【解决方案2】:

choice 是 int,你写 char - '1', '2' 的情况。写如下:

    choice = menu();
    switch (choice)
    {
    case 1: 
        reserveSeat();
        break;
    case 2: 
        displayInfo();
        break;
    // ...

In your code you can come to case '1' when choice is an ASCII code of '1', i.e. 49. In your code it could never happen, so you stuck in the infinite loop with menu().

【讨论】:

  • 废话,解决了它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2011-06-06
相关资源
最近更新 更多