问题描述
在运行 C++ 程序时,命令窗口中显示的汉字乱码。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec1,ivec2;
int ival;
cout << "请为ivec1输入相应的数:" << endl;
while(cin>>ival)
ivec1.push_back(ival);
//测试是哪个状态位被设置了
if(cin.eof() == 1) cout << "eofbit 为 1" << endl;
if(cin.bad() == 1) cout << "badbit 为 1" << endl;
if(cin.fail() == 1) cout << "failbit 为 1" << endl;
cin.clear();//将eofbit、badbit、failbit三个状态位设置为0
cout << "请为ivec2输入相应的数:" << endl;
while(cin>>ival)
ivec2.push_back(ival);
system("pause");
return 0;
}
代码来自冲出黑暗的博客。
运行结果为:
另一个问题,代码21行之后的内容没有输出。。。
解决过程
直接查找“C++命令窗口汉字乱码”相关问题。此处参考臭咸鱼的博客。
原因在于:编译器mingw 输出的数据使用的是UTF-8编码,而控制台默认使用GBK编码来解析它。
解决办法:在tasks.json
文件中添加"-fexec-charset=GBK",
和"-finput-charset=UTF-8",
,即使用UTF-8编码方式读取,GBK编码方式生成.exe
文件。
tasks.json
配置如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\TDM-GCC-64\\bin\\g++.exe",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new",
"showReuseMessage": true,
"clear": false
},
"args": [
"-g",
// 处理mingw中文编码问题
"-fexec-charset=GBK", // 令mingw按GBK编码生成exe文件
"-finput-charset=UTF-8",// 令mingw按UTF-8编码处理(此参数可以不设置)
//
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "test",
"isDefault": true
}
}
]
}