记录使用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"
        }
    }
相关推荐
leisoo80974 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴4 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
捷瑞电子工坊5 小时前
嵌入式秋招面经:5大核心模块高频考题与实战避坑总结
c语言·stm32·嵌入式工程师·rtos·通信协议·嵌入式面试
一只旭宝5 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
摇滚侠6 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
蒸蒸yyyyzwd6 小时前
秋招不熟悉力扣学习笔记1
笔记·学习·leetcode
天空'之城7 小时前
C 语言工业级通用组件手写 30:安全内存拷贝组件
c语言·内存拷贝·工业级组件·安全内存操作
coder!mq7 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding7 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ7 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio