gpt4 book ai didi

c++ - std::cin 在不应该接收输入时接收输入

转载 作者:行者123 更新时间:2023-11-30 03:45:56 24 4
gpt4 key购买 nike

我最近遇到了 std::cin 的问题,当我尝试将它与 std::this_thread::sleep_for() 结合使用时,它甚至还没有被调用时就开始获取输入。

这是我一直在使用的代码:

#include <iostream>
#include <chrono>
#include <thread>
#include <string>

using std::string
using namespace std::this_thread
using namespace std::chrono

int main(){
string a;
sleep_for(seconds(3)); //start typing around now
std::cin >> a; //the text typed during the sleep_for() shows up now
return 0;
}

当您在 sleep_for() 期间开始键入时,文本只会在 std::cin 被调用时显示。我想知道是否有人知道如何修复它以及为什么会发生这种情况。

最佳答案

出现这种情况的原因是涉及两个组件并且它们独立运行:

  • 第二部分是您的程序。它通常所做的只是其内部内容以及通过 stdin、stdout 和 stderr 与外部的通信。
  • 第一个组件是控制台(终端 [模拟器]、命令行、DOS 框......对此有各种名称),它实际显示程序的输出并从键盘接收程序的输入。

控制台独立工作,这意味着即使您的程序尚未请求输入,它也会为您的程序收集输入。此输入被缓冲并发送到您的程序,当您请求时,您将在其中接收它。

现在,您能做些什么呢?首先,您可以编写自己的控制台,其行为如您所愿,但这绝非易事。其次,有一些方法可以通过所谓的转义序列与控制台通信。这些序列例如允许您显示颜色或粗体字体,但它们不是标准化的,因此它们取决于控制台,因此获得可靠的结果也很重要。但是,有一些库,例如“诅咒”和其他各种具有相似名称的。这些甚至允许您在控制台内创建基于文本的窗口,这些应该是值得关注的。

关于c++ - std::cin 在不应该接收输入时接收输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com