问:VSCode c++scanf中文内部终端printf乱码,怎么解决

情况如下图:

分析:

当右下角编码为utf-8时,在内部终端中可以正确输出printf中的内容,却无法正确输出scanf读取的内容

原理:

https://bbs.csdn.net/topics/398436034按照这一篇来讲,就是文件编码和终端编码不统一造成的问题.
说白了就是scanf读取的时候实际上是以gbk编码读取的,printf的时候却是以utf-8输出,两者不统一就乱码了
所以问题在于,内部终端的字符集是65001 utf-8,如何修改成936或者如何scanf的时候将数据直接以utf-8读取.

核心:

第一句scanf的printf的编码取决于终端编码,第二句printf的编码取决于文件编码
scanf录入的编码始终是gbk,因此只有终端是gbk时候才能正确printf中文
而第二局句printf的编码使用与文件编码相同,所以当文件编码和终端相同时,不管都是gbk还是utf-8都会输出正确内容
提一嘴,为什么外部终端可以scanf中文,原因是外部终端的编码本身就是936 gbk编码

用有没有什么办法可以将内部终端也修改成936呢?有!

解决方法

1.直接在终端中输入chcp 936然后回车
这个方法可以短暂修改终端的字符编码,但如果使用launch和task等配置文件运行代码就会重置字符集.因此要想用这个方法运行代码只能用code runner这个插件来右击运行

2.在代码中手动设定内部终端编码的字符集,如下:

#include <stdio.h>
#include <windows.h>

int main()
{
    SetConsoleOutputCP(936);
    SetConsoleCP(936);
//手动设置字符集,从头文件windows.h调用
    char a[100];
    scanf("%s", a);
    printf("%s\n", a);

    printf("why??????可以吗?\n");
    return 0;
}

重点: 由于手动将终端设置为gbk编码,于是右下角的文件编码也需要改成gbk,否则第二句printf乱码 

 缺点很明显,和用clion一样每次都得多打个东西很难受,强迫症打咩!
3........我哪知道啊,求个大神教一下怎么改内部终端默认编码字符集
什么都尝试过了,设置里面搜索encoding不管是utf-8还是gbk一点影响都没有
关于右下角的文件编码的作用我在核心中提到了,对终端编码没影响的

最后

为什么我用c++写的代码看起来很C,是因为我目前是一名大二软件工程的学生,这学期在上数据结构(C语言),由于用到了引用,便在C++的环境运行代码,勿喷

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值