【问题标题】:Repeating loop until enter is pressed重复循环直到按下回车
【发布时间】:2015-09-23 06:15:23
【问题描述】:

对于其他发现此问题的人,可以使用 conio.h 库中的 kbhit() 函数来完成。只需在我放 SOMETHING 的地方插入 !kbhit() ,它就会正确循环,但是我正在寻找一种没有库的方法。

我是一个尝试在控制台中创建简单动画的初学者。动画会在控制台的右手边出现 UP 字样,而在右手边出现 DOWN 字样。到目前为止,我已经让动画完成了一次迭代,但我正在尝试让它重复,看起来文本会回到顶部或底部并再次执行,直到用户按下 ENTER 键.

我的书(我是根据教科书自学的)看起来似乎没有任何特定的库,除了 iostream 和 windows.h,但也欢迎包含库函数的帮助,毕竟这是一种学习体验。非常感谢!

对代码的一点解释是,我设置了 UP 和 DOWN 起始位置的坐标,然后移动光标,用空格删除它所在的前一行,然后增加 2 并输入一个新单词。我想我可以使用第二个 while 循环来检查是否按下了 ENTER 键。

#include <iostream>
#include <windows.h>
using namespace std;


int main()
{
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD upPos = {20,28};
    COORD downPos = {50, 0};
    char endState;
    while ( SOMETHING )
    {
      COORD upPos = {20,28};
      COORD downPos = {50, 0};
        while (upPos.Y >=0)
        {
            SetConsoleCursorPosition(screen,upPos);
            cout << "UP" << endl;
            upPos.Y++;

            SetConsoleCursorPosition(screen,upPos);
            cout << "  " << endl;
            upPos.Y -=2;

            SetConsoleCursorPosition(screen,downPos);
            cout << "DOWN" << endl;
            downPos.Y--;

            SetConsoleCursorPosition(screen,downPos);
            cout << "    " << endl;
            downPos.Y+=2;

            Sleep(100);

        }

    }
}

【问题讨论】:

  • 检查std::istream::read函数。
  • @Ostricho 欢迎来到 SO!如果您有答案,则应将其作为答案发布,而不是将其添加到您的问题中。

标签: c++ loops animation while-loop


【解决方案1】:

您最好的选择是创建一个自定义“GetAsyncKeyState”函数,该函数将使用 Windows 和 linux 的 #IFDEF 来选择适当的 GetAsyncKeyState() 或等效项。例如

if (GetAsyncKeyState(VK_RETURN))
    {
       exit = true;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2011-07-30
    • 2021-05-17
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多