当前位置: 首页 > article >正文

【Visual Studio】解决 CC++ 控制台程序 printf 函数输出中文和换行符显示异常

问题描述

C&C++ 控制台程序 printf 函数输出中文和换行符 \n 显示异常。

#include <stdio.h>

int main() {
    int choice;

    printf("菜单:\n");
    printf("1. 选项一\n");
    printf("2. 选项二\n");
    printf("3. 选项三\n");
    printf("4. 退出\n");
    printf("请选择一个选项 (1-4): ");
    scanf_s("%d", &choice);

    switch (choice) {
    case 1:
        printf("您选择了选项一\n");
        // 在这里执行选项一的代码
        break;
    case 2:
        printf("您选择了选项二\n");
        // 在这里执行选项二的代码
        break;
    case 3:
        printf("您选择了选项三\n");
        // 在这里执行选项三的代码
        break;
    case 4:
        printf("您选择了退出,程序结束。\n");
        return 0;
    default:
        printf("无效的选项。请重新输入 (1-4).\n");
        break;
    }

    return 0;
}


原因分析

UTF-8编码有两种形式:带签名的UTF-8和不带签名的UTF-8。“签名"实际上是一个叫做"字节顺序标记”(Byte Order Mark,BOM)的特殊字符,它的存在可以帮助识别文件的编码方式。

  1. 带签名的UTF-8文件以一个特殊的字符序列(EF BB BF)开始,这个字符序列就是UTF-8的BOM。它告诉文本编辑器或者其他读取文件的软件,这个文件是使用UTF-8编码的。

  2. 不带签名的UTF-8文件没有这个特殊的字符序列。因此,除非特别指定,否则文本编辑器或者其他读取文件的软件可能无法正确识别这个文件的编码方式。

源代码文件是使用不带签名的UTF-8编码的,因此编译器或者运行环境可能无法正确识别文件的编码方式,并且错误地将文件解析为了其他编码方式(例如ASCII或者ISO-8859-1),这可能导致换行符 \n 无法被正确解析。


解决方案

  1. 点击菜单栏工具,选择自定义

  2. 点击命令

  3. 菜单栏选择文件,点击添加命令

    4.类别选文件,找到高级保存选项,点确定

  4. 点击菜单栏文件,选择高级保存选项编码选择UTF-8 带签名

  5. 保存文件,重新编译运行。中文和换行符正常显示。

    将文件的编码方式改为带签名的UTF-8后,编译器或者运行环境可以通过BOM正确识别文件的编码方式,并且正确地解析换行符 \n,才能得到正确的输出。


参考资料

  • https://blog.csdn.net/qq_41868108/article/details/105750175

http://www.kler.cn/a/374371.html

相关文章:

  • 强化学习基础之贝尔曼期望方程
  • ArrayList源码解析
  • PTA数据结构编程题7-1最大子列和问题
  • Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架
  • CTF MISC 简单的脚本的撰写 -- 进制转换篇
  • linux RCU调优
  • logback 替换日志中的类名
  • 【论文复现】以思维链为线索推理隐含情感
  • git commit应遵循的提交规范
  • 【设计模式】Java创建型设计模式之工厂模式魔法:打造灵活的冰箱工厂
  • 科研项目:利用AI大模型获得基金资助的10个原则
  • 家用储能用什么电表呢?
  • CentOS 9 Stream 上安装 WebStorm
  • 在浏览器和Node.js环境中使用Puppeteer的Rollup与Webpack打包指南
  • 【p2p、分布式,区块链笔记 分布式容错算法】: 拜占庭将军问题+实用拜占庭容错算法PBFT
  • 【客户端开发】electron 中无法使用 js-cookie 的问题
  • 基于单片机的家用电器电能测量仪设计
  • ElSelect 组件的 onChange 和 onInput 事件的区别
  • 三菱FX5UPLC 安全功能
  • EMQX MQTT消息服务器安装内网穿透配置WS公网地址远程连接
  • C# 编程基础:深入解析构造函数与析构函数
  • ClickHouse 5节点集群安装
  • node.js_npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1
  • 深入了解 Three.js 中的材质与光照
  • 信捷 PLC C语言 简易绝对运动函数BMC_A_DRVA_BODY在POU FC中的使用
  • C++初阶教程——类与对象(中篇)