【问题标题】:Preventing printf from spamming the console while getting user input防止 printf 在获取用户输入时向控制台发送垃圾邮件
【发布时间】:2014-06-25 09:39:40
【问题描述】:

我正在编写 Windows 上的控制台应用程序。 我把它做成了多线程的,所以它可以在我接收来自提示的输入时将状态打印到控制台。

但是当我在输入命令时调用 printf() 时,我看到输出与我输入的内容相交。

我怎样才能解决这个问题?有没有办法让输入行分开?

我正在使用 getline(cin, strcommand);收集输入数据

【问题讨论】:

  • 您是否在输出字符串的末尾输出换行符(因为stdout 是行缓冲的)?

标签: c++ c windows console


【解决方案1】:

标准输出是互斥资源,不能同时供输入和输出使用。

在您的问题中,输入和输出相互交叉,因此我认为您可以使用缓冲区来存储您在输入时由打印状态线程创建的日志。输入结束后,可以查看是否还有日志没有打印出来。

while(cin >> x) {
  //get output buffer mutex
  if(log_exist)
     //print the log
     //clear the flags
  //release output buffer mutex
}

【讨论】:

    【解决方案2】:

    我想你只需要用

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多