IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 关于VScode C/C++ cmd配置问题及不能出现中文路径和中文终端输出乱码的解决办法 -> 正文阅读

[开发工具]关于VScode C/C++ cmd配置问题及不能出现中文路径和中文终端输出乱码的解决办法

? ?最开始接触c/c++时,老师给推荐的软件是dev-c++,这个比较方便,但功能性较弱,所以接触到VS,又发现VS太过臃肿,用于一般的小编程文件不太合适,而vscode则是比较适合大学生的一款编程软件。当初第一次接触到vscode,只会在上面写程序,但不知道怎么运行,查了很多资料,发现好多都是不起作用,最终终于弄好,也是不容易,然后最近发现不需要配置环境,只需用自带的code runner就可以在终端输出,但这种输出对C/C++的中文输出会出现乱码现象。

本文针对小白(可能很多地方很简单)

? ?VS code cmd 配置

? 笔者认为对于C/C++的编译运动最好的就是用cmd,也是和dev一样,也更好可以适应,个人感觉终端输出不是很容易识别。

首先对扩展包的下载肯定是最基础的 ,code runner也推荐下载,因为对于python和一些其他语言,还是选择通过终端输出的方式调试比较好。

?

?我的文件夹里设置的是cpp和exe分开的两个文件夹,当然也可以选择放在一起,但要修改一些.vscode文件夹里面的配置,如果不想麻烦也是建议和我这样分开。

mingw64的下载

?在配置cmd前提是有gcc,就是mingw64的下载,我是下载下来放在D盘

?

下面是.vscode里的4个配置:

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:/mingw64/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

需要修改的是mingw64的bin文件夹的位置,如果你和我一样直接放在D盘,就不用修改了

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "cmd启动(不自动退出)", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "C:/Windows/system32/cmd.exe", // 将要进行调试的程序的路径
            "args": [
                "/K",
                "F:/c++/exe/${fileBasenameNoExtension}.exe"
            ], // 程序调试时传递给程序的命令行参数,/K指执行完命令后不关闭命令窗口
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
            "cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
            "environment": [],
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "MIMode": "gdb",
            "miDebuggerPath": "D:/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
            "preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        {
            "name": "gdb启动(断点可用)", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "F:/c++/exe/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
            "cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
            "environment": [],
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "MIMode": "gdb",
            "miDebuggerPath": "D:/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
            "preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

也是根据自己的cpp文件夹和exe文件夹的位置修改,下面两个类同。

settings.json

{
    "files.associations": {
        "type_traits": "c",
        "array": "c",
        "deque": "c",
        "string": "c",
        "unordered_map": "c",
        "vector": "c",
        "string_view": "c",
        "initializer_list": "c",
        "cmath": "c",
        "queue": "cpp",
        "ostream": "cpp",
        "iostream": "cpp",
        "optional": "cpp",
        "istream": "cpp",
        "system_error": "cpp",
        "tuple": "cpp",
        "utility": "cpp",
        "atomic": "cpp",
        "bit": "cpp",
        "*.tcc": "cpp",
        "cctype": "cpp",
        "clocale": "cpp",
        "compare": "cpp",
        "concepts": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "exception": "cpp",
        "algorithm": "cpp",
        "functional": "cpp",
        "iterator": "cpp",
        "memory": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "random": "cpp",
        "iosfwd": "cpp",
        "limits": "cpp",
        "new": "cpp",
        "ranges": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "typeinfo": "cpp"
    },
    "C_Cpp.errorSquiggles": "Disabled"
}

tasks.json

{
    "version": "2.0.0",
    "command": "g++",
    "args": [
        "-g",
        "${file}",
        "-o",
        "${fileBasenameNoExtension}.exe"
    ], // 编译命令参数
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": [
            "relative",
            "${workspaceRoot}"
        ],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    },
    "tasks": [
        {
            "type": "shell",
            "label": "gcc",
            "command": "D:/mingw64/bin/gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "F:/c++/exe/${fileBasenameNoExtension}.exe",
                "-finput-charset=UTF-8",
                "-fexec-charset=GBK"
            ],
            "options": {
                "cwd": "D:/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        },
        {
            "type": "shell",
            "label": "g++",
            "command": "D:/mingw64/bin/g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "F:/c++/exe/${fileBasenameNoExtension}.exe",
                "-finput-charset=UTF-8",
                "-fexec-charset=GBK"
            ],
            "options": {
                "cwd": "D:/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        }
    ]
}

需要注意的就是,所有cpp里面或者exe里的文件或者路径都不能出现中文(后面也有教程,可以解决这个问题,不过代价蛮大)

如果出现中文路径,cmd不能正常运行

中文乱码问题分析与讨论

?

?对于cmd输出,不会出现中文乱码。而对于终端输出(C/C++),则会出现乱码。

?出现乱码,一开始笔者认为,是软件本身对终端输出的毛病,于是乎,试着尝试了其他语言,发现同样的代码在python输出不会出现乱码。

?也就是说只有在c/c++的终端输出出现问题,于是就想解决这个办法

参考:https://blog.csdn.net/weixin_40040107/article/details/103721554?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162781239216780271593432%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162781239216780271593432&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-4-103721554.first_rank_v2_pc_rank_v29&utm_term=vscode%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E6%B1%89%E5%AD%97&spm=1018.2226.3001.4187

发现终端输出的问题果然解决了,而且中文路径的问题也随之解决了,文件的命名不再限制不能设置中文,这对于我们记录编程文件有很大帮助,但这引发了其他一系列问题:

比如笔者的dev-C++再登录已经是一片乱码,所有的数据都不会显示,而修该回来就又好了。

于是笔者又去查阅资料:https://blog.csdn.net/lzyws739307453/article/details/89823900?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162781239216780271593432%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162781239216780271593432&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89823900.first_rank_v2_pc_rank_v29&utm_term=vscode%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E6%B1%89%E5%AD%97&spm=1018.2226.3001.4187

就是说,cmd和终端输出不能兼容,读到这里,笔者也放弃了,老老实实用自己的cmd输出,但总的来说,cmd输出个人感觉更优,因为cmd对于一些图形编程,有着更好的展示效果,而再终端输出,则没有太好的展示效果。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 11:00:04  更:2021-08-02 11:00:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 13:36:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码