循环中的 Cout 不会按照定义逐个打印 char

Cout in loop doesn't print char by char as defined

提问人:Alex 提问时间:1/15/2018 更新时间:1/16/2018 访问量:299

问:

我最近开始在大学学习C++,并决定在家里进步一点。我有一个想法,即制作一个程序,给定一段文本,将逐个字符打印出此类文本,中间有一点延迟(如此视频所示 SUPER.热聊天)。

我尝试使用一个简单的过程重新创建它:

void typer(string text){

for (int i = 0; i < text.length(); i++){
    cout << text[i];
    usleep(100000);
}

但是当 usleep() 设置为低于 103900 时,它将开始一次打印两个字符。我的目的是一次只打印 1 个,但速度非常快。

有什么建议吗?:D

C++ 字符串 延迟 cout

评论

0赞 Keith Thompson 1/16/2018
如果您使用而不是 ?它真的可以与 ?sleep(1)usleep(100000)usleep(103900)usleep(103899)

答:

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

EINVALusec 不小于 。(在被视为错误的系统上。1000000

评论

0赞 Keith Thompson 1/16/2018
返回值如何相关?问题中的代码只是调用它,并忽略它返回的结果和任何值。它不太可能失败。但是,是的,如果 OP 可能失败,检查返回值将是一个很好的调试步骤(但如果这是问题所在,我会感到惊讶)。usleep()errnousleep()
0赞 phy nju 1/16/2018
我想可能睡不着。usleep()
0赞 Keith Thompson 1/16/2018
不太可能,但值得检查。(我在您输入您的评论时更新了我的评论。