【问题标题】:Exiting a "do while" by pressing any key without hitting enter?通过按任意键而不按回车键退出“do while”?
【发布时间】:2016-05-28 05:53:42
【问题描述】:

我的代码出现问题,无法正常工作。我试图通过按键盘上的任意键但不按回车键让它退出执行。我的代码 sn-p 如下。

void LemonadeBuyANDCheck()
{
    int iCupsToBuy = rand() % (MAX_CUPS - MIN_CUPS) + MIN_CUPS;


    bool continueLoop = true;
    do 
    {
        int Userinput = 1;
        Userinput = !_kbhit();
        fflush(stdin);

        if (Userinput == 1)
        {
            continueLoop = false;
        }

        StoreIsOpen();
        int randomNumber = rand() % 100;

        if (iCupsOfLemonadeInStock == 0)
        {
            cout << "Customer came to buy some lemonade but you didnt have any in stock :(\n";
            //continueLoop = false;
        }

        else if (randomNumber <= 25)
        {

            cout << "Wow your lemonade is way too expensive!\n";
            iCustomerCounter++;

        }

        else if (randomNumber >= 75)
        {

            cout << "Eww your recipe for lemonade... Wow..\n";
            iCustomerCounter++;
        }


        else if (iCupsOfLemonadeInStock >= iCupsToBuy)
        {

            cout << "You sold " << iCupsToBuy << "cups of lemonade!\n";

            iCupsOfLemonadeInStock = iCupsOfLemonadeInStock - iCupsToBuy;
            iCupsOfLemonadeSold = iCupsOfLemonadeSold - iCupsToBuy;
            //Money

            fMoneyEarned += (iCupsToBuy * fCurrentLemonadePrice);
            fCurrentMoney += (iCupsToBuy * fCurrentLemonadePrice);

            iCustomerCounter++;
        }
        else if (iCupsOfLemonadeInStock < iCupsToBuy)
        {
            cout << "You didnt have enough lemonade in stock so you only sold " << iCupsToBuy - iCupsOfLemonadeInStock << endl;

            fMoneyEarned += (iCupsOfLemonadeInStock * fCurrentLemonadePrice);
            fCurrentMoney += (iCupsOfLemonadeInStock * fCurrentLemonadePrice);
            iCupsOfLemonadeInStock = 0;

            iCustomerCounter++;
        }
    } while (continueLoop != true);
    fflush(stdin);
        GameMenuSelectionVerifier();
}

【问题讨论】:

  • 您是否尝试过寻找答案?第一次点击:stackoverflow.com/questions/7010760/c-keypress-getch-cin-get
  • 你有什么问题?
  • C++ 标准库不提供“检查按键”功能,但您可以使用诸如 ncurses 之类的库。
  • Userinput kbhit 和底部的 while 不起作用,当我按 1 时,它意味着退出 do while

标签: c++ while-loop


【解决方案1】:

我认为您可以使用名为“kbhit”的函数,它位于“conio.h”头文件中。详情可点击this。你可以像这样修改它:

while(!kbhit());

【讨论】:

  • 我们从哪里得到这个“conio.h”头文件?如果我们想编写一个应用程序而不从我们旧的 16 位 MS-DOS 计算机上掸掉灰尘怎么办?
  • “conio.h”头文件很常见,和“stdio.h”头文件一样。你只需要写“#include ”,计算机就会找到它。然后就可以使用kbhit函数了。
  • 普通?哈! 20多年来,这种情况并不常见。我可以借用你的时光机吗?
  • 也许 Turbo C 有那个文件。但是,现代编译器(甚至可以追溯到 2000-2005 年)没有该文件。 Windows 甚至不再支持它。
猜你喜欢
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多