关于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对于一些图形编程,有着更好的展示效果,而再终端输出,则没有太好的展示效果。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值