如何使用enter键进行跳过处理? 发现出现乱码现象 初步判断为获取enter键键值所导致

使用enter键进行跳过处理 发现出现乱码现象 初步判断为获取enter键键值所导致 未找到解决办法。
#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++)
                    cout << a[i]; 
                break;
            }
        }
    }
    cout << endl;
}

int main()
{
    fun("当程序员聊到Perl会聊些什么呢?在各大平台搜索Perl时,你会发现大家对Perl的态度呈现出一种两级分化的状态,有人对Perl依旧保持着热情,视若珍宝,但也有人对Perl嗤之以鼻,有人甚至写下“Perl正加速走向死亡,也许2023年就会消失”的标题。");
    return 0;
}
//————————————————
//版权声明:本文为CSDN博主「离殇ya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/weixin_56613538/article/details/119835211

img

乱码出现位置随着enter键敲击的时间变化而变化
期盼可以进行解决方法之指点,感谢!

前面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;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

因为汉字在存储的时候占2个字节,但是在
for(i;i<a.size();i++) cout << a[i];
这段代码中,a[i]如果是汉字的第二个字节,a[i]显示的就是乱码。所以,这里需要判断一下a[i]是否是汉字的第二个字节


汉字的第一字节:是从0xB0 开始编码
汉字的第二字节:是从0xA1 开始编码

//这里判断a[i]是否是汉字的第二个字符,如果是,i++,避免乱码
if( i>0 && a[i] >= 0xA1 && a[i-1] >=0x80)
    i++;
//原来显示的地方不变
for(i;i<a.size();i++)             cout << a[i];