嘿嘿 解决了Dev C++ 中文乱码(有效版)

嘿嘿 解决了Dev C++ 中文乱码(有效版)

这是博主第一篇博客!记录一下博主的小小小小解决史!

很早就下载用了Dev c++ ,但现在隔了很长时间没去用过了再次打开发现出现中文乱码的现象!在网站上翻阅了许久!终于解决了问题!困扰了许久!


———————————————————————

b9cad95bc59e4dedbce6f4e952bb0234.png

这个中文乱码看着是真烦得慌!!!
tips:不要急不要急,事情慢慢都能解决掉滴!

还有不要保存在C盘哦!最好都保存在D盘内!本博客示范的未命名1.c 保存于C盘桌面上是为了演示方便!

——————————————————————————— 

图1 这是我们原来出现中文乱码的界面

685a3576c1af4600b1a82f9f3b8de7bb.png

编译的时候会出现这个窗口  

c5eb615f3a7f4727976dd0f2b48d6661.png

图一

bcef55a826094c95986a2c723ad40116.png

(再说一遍!这个中文乱码在之前没解决掉问题的时候一看到这个就很烦! )

图二是编译过后(中文乱码版)

2c62315224834b6e94745958329d7380.png

图二 

        —————————————————————————

第一种方法(也是博主强推亲测有效法)

·第一步

        请点击左上角<控制台界面>左上角

               选中<默认值D>

23a9a0bf676c47e88d9f07fa848416e9.png

图三   操作第一步    

·第二步

         将下方“使用旧版本控制台”勾上 并点击确定

590eaa2541c1436f9865d37dba80fddf.png

                     图四  控制台点击默认值后的界面

b382ae434ff44bae9576bd883c87084e.png

                         图五 勾上下方按钮后 

0db3a3de37cf44349b12aca52a485600.png

 图6 点完确定之后再次这个操作出现这样子就代表操作对了!

·第三步

        将此.c文件另存为,并选择 ANSI !!!

3b9bd6ddc3244a4b9abc9d4cfb2097a9.png
936d19a1118a4e089c5f605dd7d2fc3d.png

 图7 选择ANSI!

·第四步

打开记事本 查看右下角是否为ANSI!

464aac9366ca47c197b85bc97342d5af.png

图8 被设置为ANSI的记事本

d49642558024404c92f734af48c78c40.png

图9 未被设置 会出现中文乱码的记事本(看右下角显示得失UTF-8) 

·第五步

点全部重新编译 并运行!就成功啦! 

065d2108fa4146cfae3b1e3e92562d9e.png

图10 太幸福了!看见中文!


—>不要嫌麻烦!非常有效的一个解决中文乱码的放大 

^_^ 提供一个检测是否成功修改好中文乱码的代码

(出自懒猫老师数据结构课一实验 ,代码不完整但保证正确能顺利跑)

#include <stdio.h> #include<string.h> #include<malloc.h> #include<stdlib.h> #include<stdbool.h> #define NO_LENGTH  20 #define NAME_LENGTH 11 /* 定义学生结构体的数据结构 */ typedef struct Student{     char studentNo[NO_LENGTH];     char studentName[NAME_LENGTH]; }st; /* 定义每条记录或节点的数据结构 */ typedef struct node {     struct Student data; //数据域     struct node *next; //指针域 }Node,*Link;  //Node为node类型的别名,Link为node类型的指针别名 //定义提示菜单 void myMenu(){     printf(" * * * * * * * * * 菜     单 * * * * * * * * * *\n");     printf("     1 增加学生记录            2 删除学生记录                     \n");     printf("     3 查找学生记录            4 修改学生记录                     \n");     printf("     5 统计学生人数            6 显示学生记录                     \n");     printf("     7 退出系统                                     \n");     printf(" * * * * * * * * * * * * * * * * * * * * * * * *\n"); } void inputStudent(Link l){      printf("请输入学生学号:");      scanf("%s",l->data.studentNo);      printf("请输入学生的姓名:");      scanf("%s",l->data.studentName);      //每个新创建的节点的next域都初始化为NULL      l->next = NULL; } void inputStudentNo(char s[],char no[]){     printf("请输入要%s的学生学号:",s);     scanf("%s",no); } void displayNode(Link head){    // 填写代码,根据传入的链表head头指针,扫描链表显示所有节点的信息 } /* 增加学生记录 */ bool addNode(Link head){      Link p,q;   //p,q两个节点一前一后      Link node;  //node指针指向新创建的节点      node=(Link)malloc(sizeof(Node));      inputStudent(node);      q = head;      p = head->next;  //q指向head后面的第一个有效节点      if(head->next==NULL)          //链表为空时         head->next = node;      else {          //循环访问链表中的所有节点         while(p != NULL){             if (node->data.studentNo < p->data.studentNo){                 //如果node节点的学号比p节点的学号小,则插在p的前面,完成插入后,提前退出子程序                 q->next = node;                 node->next = p;                 return true;             }             else{                 //如果node节点的学号比p节点的学号大,继续向后移动指针(依然保持pq一前一后)                 q = p;                 p = p->next;             }         }         //如果没能提前退出循环,则说明之前没有插入,那么当前node节点的学号是最大值,此时插在链表的最后面         q->next = node;     }     return true; } bool deleteNode(Link head){     // 按照给定的学号删除学生记录,如果删除成功返回true,如果没找到学号返回false          //输入要处理的学号         char no[NO_LENGTH];     inputStudent No("查询",no);     return false; } bool modifyNode(Link head){     // 按照给定的学号找到学生记录节点,如果修改成功返回true,如果没找到学号返回false          //输入要处理的学号     char no[NO_LENGTH];     inputStudentNo("修改",no);     return false;     } int countNode(Link head){     //统计学生人数,扫描链表统计节点个数,返回节点数     Link p;     int count = 0;     p = head->next;     //填充代码     return false; } void clearLink(Link head){     Link q,p;         //遍历链表,用free语句删除链表中用malloc建立起的所有的节点 } int main() {     int select;         int count;     Link head;  // 定义链表     //建立head头结点,在这个程序中head指向头结点,头结点data部分没有内容,其后续节点才有真正的数据     head = (Link)malloc(sizeof(Node));     head->next = NULL;     while(1)     {         myMenu();         printf("\n请输入你的选择(0-7):");  //显示提示信息         scanf("%d",&select);         switch(select)         {         case 1:             //增加学生记录             if(addNode(head))                 printf("成功插入一个学生记录。\n\n");             break;         case 2:             //删除学生记录             if(deleteNode(head))                 printf("成功删除一个学生记录。\n\n");             else                 printf("没有找到要删除的学生节点。\n\n");             break;         case 3:             //查询学生记录             if(queryNode(head))                 printf("成功找到学生记录。\n\n");             else                 printf("没有找到要查询的学生节点。\n\n");             break;         case 4:             //修改学生记录             if(modifyNode(head))                 printf("成功修改一个学生记录。\n\n");             else                 printf("没有找到要修改的学生节点。\n\n");             break;         case 5:             //统计学生人数             count = countNode(head);             printf("学生人数为:%d\n\n",count);             break;         case 6:             //显示学生记录             displayNode(head);             break;         case 7:             //退出前清除链表中的所有结点             clearLink(head);             return 0;         default:             printf("输入不正确,应该输入0-7之间的数。\n\n");             break;         }     }     return 0; }


第二种方法  也是本社区最多人推荐的(但博主没成功哈 !)

第一步

        打开 <编译选项>

529a123353094dfe986636b352657ea3.png

 图一 打开编译选项

第二步

752e66305b044607946eaff8be0d5d02.png

图二 点开后的界面

         勾选“编译时加入以下命令 并 输入“-fexec-chartset=gbk”后点击确定即可

430679c36e054d3c97fde6939ecf7d9e.png

 (此方法不一定适用于所有人 因为我就是那个用这个方法没解决掉的!)



第三种方法  取自ZEEKLOG社区其他博主的博客

notepad++下载及安装步骤 

你似乎来到了没有知识存在的荒原 - 知乎

bb6bf77d43264cbbb3addbd183607ed8.png

 



这篇就这样啦!

如果有其他方法可分享在评论区帮助更多的小白结合问题!

如 你有更完善的解决方法也可以发在评论区!

 “学习经验值+𝟭”!

一起加油吧各位 !

Read more

【C++】类和对象—(下) 收官之战

【C++】类和对象—(下) 收官之战

前言:上一篇文章我们向大家介绍了类和对象的核心六个成员函数中的4个,其余两个以及初始化列表,static成员,内部类,匿名对象等会在本篇文章介绍! ✨ 坚持用清晰易懂的图解+代码语言, 让每个知识点都简单直观! 🚀 个人主页 :MSTcheng · ZEEKLOG 🌱 代码仓库 :MSTcheng · Gitee 📌 专栏系列 :📖 《C语言》🧩 《数据结构》💡 《C++由浅入深》💬 座右铭 :“路虽远行则将至,事虽难做则必成!” 文章目录 * 一,运算符重载 * 1.1什么是运算符重载? * 1.2 为什么要创造运算符重载? * 二,赋值运算符重载 * 2.1赋值运算符重载的构成 * 2.1 >>流插入<<流提取重载 * 3.1const成员函数 * 4.1取地址运算符重载 * 三,初始化列表 * 3.

By Ne0inhk

为什么顶尖团队都在用Concepts简化C++元编程?真相在这里

第一章:为什么顶尖团队都在用Concepts简化C++元编程? C++20 引入的 Concepts 彻底改变了模板元编程的编写方式,让类型约束从“运行时错误”转向“编译时契约”。传统模板依赖 SFINAE 或 requires 表达式进行类型检查,代码冗长且难以维护。而 Concepts 提供了一种清晰、可读性强的语法,使开发者能直接声明模板参数的语义要求。 更直观的类型约束 使用 Concepts 可以定义可重用的约束条件,提升模板接口的可读性与安全性。例如,定义一个适用于所有可加类型的操作: template concept Addable = requires(T a, T b) { { a + b } -> std::same_as; }; template T add(T a,

By Ne0inhk
【哈希表封装实现】—— 我与C++的不解之缘(二十九)

【哈希表封装实现】—— 我与C++的不解之缘(二十九)

前言 我们知道unordered_set和unordered_map的底层是哈希表,那现在我们就是使用我们自己实现的HashTable来封装实现出简单的unordered_set和unordered_map。 一、了解源码 在SGL-STL30版本之前源代码中是没有unordered_set和unordered_map的 unordered_set和unordered_map是C++11之后才更新的;SGL-STL30是C++11之前的版本 但是想SGL-STL30中实现了哈希表,但容器的名字叫做hash_map和hash_set(它是作为非标准的容器出现的) 源代码在hash_map/hash_set/stl_hash_map/stl_hash_map/stl_hash_set/stl_hashtable.h中 这里截取其中的一部分来看一下: // stl_hash_settemplate<classValue,classHashFcn= hash<Value>

By Ne0inhk
特殊类的设计----《Hello C++ Wrold!》(28)--(C/C++)

特殊类的设计----《Hello C++ Wrold!》(28)--(C/C++)

文章目录 * 前言 * 设计一个不能被拷贝的类 * 设计一个只能在堆上创建对象的类 * 设计一个只能在栈上创建对象的类 * 设计一个不能被继承的类 * 设计一个只能创建一个对象的类(也叫做单例模式) * 单例模式的两种实现方法 * 饿汉模式 * 懒汉模式 前言 在 C++ 面向对象编程体系中,类是封装数据与行为的核心单元,其设计直接关系到程序的安全性、可维护性与性能表现。除了支撑常规业务逻辑的普通类,实际开发中常需面对具有特殊约束的场景:例如防止对象拷贝以规避资源重复释放风险,限定对象创建位置(仅堆或仅栈)以规范内存管理,禁止类被继承以保障核心逻辑不被篡改,或是确保类仅存在一个实例以实现全局资源统一调度 —— 这些需求的实现,正是特殊类设计的核心范畴。 本文聚焦 “特殊类设计” 这一主题,系统拆解五种典型特殊类的实现逻辑与技术细节。从 “不能被拷贝的类” 对拷贝构造函数、赋值运算符的管控,到 “只能在堆 / 栈上创建对象的类” 对构造函数与内存分配接口的限制;从 “不能被继承的类” 基于构造函数私有化(C++98)与final关键字(

By Ne0inhk