有一天,心情糟糕的我正在肝编程(@_@),由于肝的能力貌似不太够,我成功的不干了,(跟所有的算法说拜拜~啦啦啦!),但我又心血来潮,研究起了等待函数,于是……
逐字输出!
没错,我研究了逐字输出,然后发现了许多的等待函数,最后采用了这个方法。
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 延迟1000毫秒
std::this_thread::sleep_for(std::chrono::microseconds(100000)); // 延迟1000000微秒
std::this_thread::sleep_for(seconds(1)); //延迟1秒
这三个函数都能实现等待一秒的功能,而且都需要在头文件中加上这两个库函数:#include <chrono> 、#include <thread>
这个函数移植性更高,但是实际精度可能会受到以下因素的影响:
1、操作系统调度:由于线程调度是由操作系统控制的,因此即使请求睡眠1秒钟,实际暂停时间可能略长或略短于1秒。
2、时间分辨率:系统对时钟精度的限制也可能影响到睡眠的实际时长。
3、信号和中断:如果有其他更高优先级的事件(如硬件中断或信号处理)打断了当前线程的睡眠状态,那么线程可能会提前结束睡眠。
在大多数情况下,std::this_thread::sleep_for可以提供较为稳定可靠的延迟等待效果,但在实时性要求极高的场景下,可能需要结合特定平台的API来实现更为精确的延时控制。
那么接下来我们就要实现逐字输出的功能了!!!
先把代码框架写好……
#include <string>
#include <chrono>
#include <thread>
#include <iostream>
using namespace std;
int main() {
return 0;
}
然后就是定义一个字符串变量,再进行输入……
#include <string>
#include <chrono>
#include <thread>
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
return 0;
}
我为什么采用string类型定义呢?因为string类型更加方便,循环时的条件只需要设为i < s.size()即可,使用char类型数组时,可能要逐字输出空格,换行等特殊字符,设置循环条件较为麻烦
最后再写一个循环输出……
#include <string>
#include <chrono>
#include <thread>
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int i = 0;
while (i < s.size()) {
cout << s[i++];
this_thread::sleep_for(chrono::milliseconds(500));//休眠500毫秒
}
return 0;
}
先输出,再等待500毫秒
大功告成!!!让我们来运行一下……
唉,怎么在本地运行不太对?
怎么等待一会儿后输出了整段话呢?
让我们在输出后加上一个endl换行试试。
(^_^)!!!竟然成功了!!!那这个模板就这样吧!谢幕!
(好了?这啥也不是好不好,功能都没实现!)
哈哈哈,开玩笑,我们想要的效果还没有实现呢!因为endl会刷新输出流缓存区,所以才有这样的效果,我们要想成功做到逐字输出,每输出一次就要刷新输出流缓存区。
那么既然这样,那我们就继续更改吧!
这里会用到cout.flush()函数,这个函数可以刷新输出流缓存区,我们再把这个功能做成一个函数,需要用到的时候,就可以调用函数进行逐字输出了,是不是很方便?
代码如下:
#include <string>
#include <chrono>
#include <thread>
#include <iostream>
using namespace std;
void output(string s){//函数名可按自己习惯更改
int i = 0;
while (i < s.size()) {
cout.flush();
cout << s[i++];
this_thread::sleep_for(chrono::milliseconds(500));
}
}
int main() {
string s;
cin >> s;
output(s);//可以传入字符串类型变量
output("\n逐字输出引擎");//还可以传入换行符\n
return 0;
}
我还有升级版,可以读取空格!关注我领取源代码!
芜湖,逐字输出引擎写好啦!那个……都看到这里了,能不能给一个三连?或者看看我的其他作品,比如C语言大小写转换,或者min()、max()函数的使用?蟹蟹!
感谢您的观看~@(^_^)@
图片来自inscode上的一个开源程序