前面a[i]已经输出过了, if (ch == 13)中的for就要先i++对i加1,从下一个字节开始输出.
否则同一个字节会输出两次, cout << a[i];是一个字节一个字节的输出,一个汉字是两个字节,如果多输出这个字节是属于汉字的.就会多出半个汉字的字节从而形成乱码.
for(i;i<a.size();i++)
改成
for(i++;i<a.size();i++)
#include <conio.h>
#include <iostream>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;
void fun(const string a)
{
int ch;
size_t len = a.size();
for(int i = 0;i<a.size();i++)
{
cout << a[i];
fflush(stdin);
usleep(50000);
if (kbhit()==true)//如果有按键按下,则_kbhit()函数返回真
{
ch =getch();//使用_getch()获取按下的键值
if (ch == 13)
{
for(i++;i<a.size();i++) //要先i++从下一个字节开始输出
cout << a[i];
break;
}
}
}
cout << endl;
}
int main()
{
fun("当程序员聊到Perl会聊些什么呢?在各大平台搜索Perl时,你会发现大家对Perl的态度呈现出一种两级分化的状态,有人对Perl依旧保持着热情,视若珍宝,但也有人对Perl嗤之以鼻,有人甚至写下“Perl正加速走向死亡,也许2023年就会消失”的标题。");
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!