提问人:Alex 提问时间:1/15/2018 更新时间:1/16/2018 访问量:299
循环中的 Cout 不会按照定义逐个打印 char
Cout in loop doesn't print char by char as defined
问:
我最近开始在大学学习C++,并决定在家里进步一点。我有一个想法,即制作一个程序,给定一段文本,将逐个字符打印出此类文本,中间有一点延迟(如此视频所示 SUPER.热聊天)。
我尝试使用一个简单的过程重新创建它:
void typer(string text){
for (int i = 0; i < text.length(); i++){
cout << text[i];
usleep(100000);
}
但是当 usleep() 设置为低于 103900 时,它将开始一次打印两个字符。我的目的是一次只打印 1 个,但速度非常快。
有什么建议吗?:D
答:
2赞
fab
1/15/2018
#1
您需要刷新流,否则它将被缓存
cout.flush();
http://www.cplusplus.com/reference/ostream/basic_ostream/flush/
评论
0赞
Alex
1/15/2018
在usleep()之前和之后尝试了两种方法(cout.flush()和cout << text[i] << flush;),仍然一无所获。
0赞
Keith Thompson
1/16/2018
@Alex:它适用于我,要么 .std::cout.flush()
std::cout << text[i] << std::flush
0赞
fab
1/16/2018
@Alex尝试 instand of ;usleep 已经过时了,...愿它有所帮助nanosleep()
usleep()
1赞
phy nju
1/15/2018
#2
您需要齐平输出
cout << text[i] << flush;
usleep()
函数在成功时返回。如果出错,则返回,并设置 errno 以指示错误原因。0
-1
错误 被信号打断;参见 signal(7)。EINTR
EINVAL
usec 不小于 。(在被视为错误的系统上。1000000
评论
0赞
Keith Thompson
1/16/2018
返回值如何相关?问题中的代码只是调用它,并忽略它返回的结果和任何值。它不太可能失败。但是,是的,如果 OP 可能失败,检查返回值将是一个很好的调试步骤(但如果这是问题所在,我会感到惊讶)。usleep()
errno
usleep()
0赞
phy nju
1/16/2018
我想可能睡不着。usleep()
0赞
Keith Thompson
1/16/2018
不太可能,但值得检查。(我在您输入您的评论时更新了我的评论。
评论
sleep(1)
usleep(100000)
usleep(103900)
usleep(103899)