【问题标题】:input inside of while loop without waiting for user在while循环内输入而不等待用户
【发布时间】:2021-10-04 06:15:51
【问题描述】:

我要写一个程序,里面有一个while循环,用户可以随时输入程序,但是while循环不等待接收用户输入,继续工作。每当用户输入新输入时,程序将根据该输入运行。该程序使用 C++ 编写,程序名称为 Snake Game。对不起,我的代码太长了,我可以展示一小部分。

while(1)
{

    Move(grid,snake,grid_rows,grid_cols,len_snake,ch);
    show(grid,grid_rows,grid_cols);

    Sleep(1000);
    cin>>ch;
    system("CLS");
}

【问题讨论】:

  • 使用标准 C++,std::cin 上的所有输入操作都将阻塞,直到终端决定实际向您的程序发送某些内容。您需要使用特定于操作系统的功能来进行非阻塞终端输入。
  • Mby 您正在寻找线程功能吗?
  • 如果它能让我达到我的目标
  • 看看这个:stackoverflow.com/questions/29335758/…, @Sule 这可能会让事情变得不必要地复杂化。
  • @Sule - 线程不涵盖它。如果在等待用户输入(来自终端、键盘或其他任何东西)的线程上使用阻塞 I/O,则该线程将被阻塞。因此,如果多个线程试图捕获用户输入,则用户输入在实践中效果不佳。需要的是非阻塞输入(例如,如果没有待处理的输入,则输入操作会立即返回 - 通常表明它已经这样做了),而 C++ 标准没有规定这样的事情。因此,如前所述,需要特定于操作系统的功能(或包装此类功能的某些库)。

标签: c++


【解决方案1】:

谢谢你 pepijn kramer。在你的帮助下,我完成了我的程序。

    while (1)
    {
    system("CLS");
    show(grid,grid_rows,grid_cols);


    if (_kbhit())
    {
        ch = _getch();
    }

    Move(grid,snake,grid_rows,grid_cols,len_snake,ch);

    check_(grid,snake,grid_rows,grid_cols,len_snake);

   Sleep(500);
}

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2012-10-13
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多