记录使用VSCode调试含scanf()的C语言程序出现的两个问题

文章目录

一、使用VSCode调试不论用内部终端还是外部cmd都没办法输入数字、字母和中文

前提:

①VSCode内部是在终端窗口来输入数据的

②若需打开外部窗口launch.json配置"externalConsole": true 按下F5调试会自动打开cmd窗口

如果确认输入窗口没问题,那么再看下输入时机,即代码走到哪步我们才可以输入数据
错误的输入时机:
正确的输入时机:

再次按下单步跳过,调试会显示暂停,等待用户输入。输入完毕后回车,调试即可继续。

完整的演示:

二、本例需要输入中文,但把输入的中文存入数组中发现不是UTF-8编码的导致程序输出不对

前提:

源代码、编译器、控制台编码都已统一成了UTF-8编码但是程序输出错误

解决:

拷打了元宝,让我使用windows terminal(没有安装需要安装,在Microsoft store即可安装)

①验证电脑上是否有windows terminal:

用win+R打开运行窗口输入wt能弹出窗口即为已安装

②将windows默认终端配置成windows terminal
③配置launch.json

需要注意的只有配置"externalConsole": true 这样能保证调试时打开的是windows terminal

④配置tasks.json

先选择"C/C++: gcc.exe 生成活动文件",来编译生成.exe文件

编译完想要用windows terminal执行,选择"在Windows Terminal中运行",否则就继续在VScode终端中执行

plain 复制代码
{
    "tasks": [
        {
            "label": "在Windows Terminal中运行",//编译完想要用windows terminal执行,选择这个,否则就继续在VScode终端中执行
            "type": "process",
            "command": "wt.exe",
            "args": [
                "-w",
                "0",
                "nt",
                "--title",
                "${fileBasenameNoExtension}",
                "cmd",
                "/k",
                "cd /d \"${fileDirname}\" && chcp 65001 && \"${fileBasenameNoExtension}.exe\" && echo. && pause"
            ],
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "shared",
                "focus": false
            }
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 生成活动文件",//先编译,选择这个
            "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-fexec-charset=UTF-8", // 关键:exe 输出中文编码为 UTF-8
                "-finput-charset=UTF-8" // 关键:告诉编译器源文件是 UTF-8 编码
                //"-fexec-charset=GBK", 
                //"-finput-charset=GBK" 
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
⑤配置settings.json

三、怎么确认源代码、编译器、控制台编码都已配置成了UTF-8编码

①源代码:
②编译器:
③VSCode控制台
命令检测:输入chcp--输出为65001即为UTF-8编码
plain 复制代码
"terminal.integrated.defaultProfile.windows": "PowerShell",
    "terminal.integrated.profiles.windows": {
        "Windows Terminal": {
            "path": "wt.exe",
            "args": [
                "-w",
                "0",
                "nt"
            ]
        },
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "args": [
                "-NoLogo",
                "-NoExit",
                "-Command",
                "chcp.com 65001"
            ]
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\Sysnative\\cmd.exe",
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [
                "/K",
                "chcp 65001"
            ],
            "icon": "terminal-cmd"
        }
    }
相关推荐
toooooop82 小时前
php BC MATH扩展函数计算精度-第三个参数
开发语言·php
蓁蓁啊2 小时前
C/C++编译链接全解析——gcc/g++与ld链接器使用误区
java·c语言·开发语言·c++·物联网
weixin_307779132 小时前
C#实现两个DocumentDB实例之间同步数据
开发语言·数据库·c#·云计算
foundbug9992 小时前
基于C#的OPC DA客户端实现源码解析
开发语言·c#
yuezhilangniao2 小时前
Next.js 项目运维手册-含-常用命令-常见场景
运维·开发语言·reactjs
中屹指纹浏览器2 小时前
2026年指纹浏览器技术迭代与风控对抗演进
经验分享·笔记
czxyvX3 小时前
016-二叉搜索树(C++实现)
开发语言·数据结构·c++
1104.北光c°3 小时前
【从零开始学Redis | 第一篇】Redis常用数据结构与基础
java·开发语言·spring boot·redis·笔记·spring·nosql
我能坚持多久3 小时前
D22—C语言预处理详解:从宏定义到条件编译
c语言·开发语言