我编写了一个用getline()
获取用户输入的程序,然后用一些std::cout
s将一些信息输出到终端,并在数据之间有一些延迟。但是,如果用户在输出被打印到屏幕时输入,则无论输入的是什么,都会以非常丑陋的方式拼接到输出中。
是否有某种方法可以阻止用户输入写入屏幕,同时仍然使用终端?
编辑:这不同于"如何防止过度打字",因为该问题是关于防止程序输出打破用户的输入,这个问题是关于防止用户' ;打破程序输出的输入。它们是不同的,不幸的是,这个问题的答案都不适用于这个问题(除了可能编写GUI)。
修改:This回答了我的问题。
#include <iostream>
#include <unistd.h>
#include <termios.h>
int main()
{
std::string input;
timespec* interval= new timespec;
interval->tv_sec=1;
termios t_echo;
termios t_noecho;
tcgetattr(0,&t_noecho);
tcgetattr(0,&t_echo);
t_noecho.c_lflag&= ~ECHO;
while(true)
{
std::getline(std::cin,input);
tcsetattr(0,TCSANOW,&t_noecho);
std::cout<<input<<std::endl;
std::cout<<"output1"<<std::endl;
nanosleep(interval,interval);
std::cout<<"output2"<<std::endl;
nanosleep(interval,interval);
std::cout<<"output3"<<std::endl;
nanosleep(interval,interval);//prevents typeahead
tcflush(0,TCIFLUSH);
tcsetattr(0,TCSANOW,&t_echo);
}
return 0;
}