逐字输出模板

逐字输出资源

     有一天,心情糟糕的我正在肝编程(@_@),由于肝的能力貌似不太够,我成功的不干了,(跟所有的算法说拜拜~啦啦啦!),但我又心血来潮,研究起了等待函数,于是……


逐字输出!

没错,我研究了逐字输出,然后发现了许多的等待函数,最后采用了这个方法。

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上的一个开源程序

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tyz_C

你的打赏是我最大动力,感谢大家

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值