精华内容
下载资源
问答
  • 可以在main ()函数开头加上以下语句即可解决中文输出乱码问题 system(“mode con cp select=65001”);

    可以在main ()函数开头加上以下语句即可解决中文输出乱码问题
    system(“mode con cp select=65001”);

    展开全文
  • 编辑器写C语言输出中文乱码记录

    千次阅读 多人点赞 2019-05-27 18:27:45
    但是当使用编辑器+编译器的方式写代码,在这个环境下输出中文可能会遇到中文输出乱码。 环境 编辑器:VSCode 编译器:Mingw-w64 C语言代码: #include <stdio.h> int main() { char a...

    记录

    在写C语言时,有时候需要使用printf输出中文,如果使用IDE来写代码,例如使用VisualStudio,输出中文没有问题。但是当使用编辑器+编译器的方式写代码,在这个环境下输出中文可能会遇到中文输出乱码。

    环境

    编辑器:VSCode

    编译器:Mingw-w64

    C语言代码:

    #include <stdio.h>
    
    int main() 
    {
        char a[2048];
        FILE *fp;
        if ((fp = fopen("test.txt", "r+")) == NULL) {
            printf("无法打开\n");
            return 0;
        }
        fscanf(fp, "%s", &a);
        printf("a的值:%s\n", a); 
    
        fclose(fp);
        return 0;
    }

    代码说明:上述代码的主要作用是读取文件的内容,并将读取内容输出在屏幕上

    文件内容:

    说明:test.txt 文件是通过右键新建文本文档建立的。

    过程

    1.编译:使用gcc main.c -o main,生成可执行文件main.exe

    2.运行:输入main.exe 运行程序 (注:test.txt和C源文件在同一个文件夹下)

    分析原因:

    这时候输出中文异常,但是读取的内容没有问题。

    这里关注两个:一是为什么"printf("a的值:%s\n", a)"这句代码中的汉字在输出时乱码,二是同样汉字,读取的内容没有问题。

    第一个问题是因为编码不一致,也就是文件的编码和系统终端(也就是cmd)的默认编码是不一样的,中文系统里cmd的默认编码是GBK,而在VSCode中文件的编码是UTF-8。当这两个编码不一样时,会出现中文乱码,准确说是异常。

    图:VSCode的文件默认编码是UTF-8

    第二个问题为什么读取内容没问题呢,这是因为Windows文本文档的默认编码是ANSI(在中文系统里即GBK)(ANSI和ASCII的关系:简单说就是ANSI是对ASCII的扩展,兼容ASCII),cmd默认输出编码是ASCII(即GBK),所以读取了文件内容再将内容输出到cmd终端没有问题。

    图:通过文件-另存为 可以查看到这个文件的编码方式,默认为ANSI

    测试

    知道后,可以做个测试,将test文件的编码改为UTF-8,然后再读取输出,如果没有错,这时候应该输出异常。

    1.保存为UTF-8

    2.运行下程序

    和预想结果一样

     

    拓展

    这里使用另一个轻量IDE:Dev-C++

    当把main.c用dev打开时,出现乱码:

    这个乱码和上面终端输出“a的值”的乱码一样

    做个测试,使用dev新建文件,复制代码进去

    编译运行结果:

    我们在dev的终端里"a的值"输出没有问题,后面的内容异常,这是因为前面把test文件改为了UTF-8。这里就要问一个问题dev的代码文件难道和cmd的编码格式一样?

    可以使用notepad++查看文件编码:

    这个demo.cpp是在dev里创建,编码是GB2312

    前面用dev打开VSCode创建的main.c出现乱码,说明dev是以GB2312的编码方式打开文件的,也是以GB2312保存文件的,而GB2312编码在cmd里以GBK编码输出中文是没有问题的。

     

    参考资料

    python中文编码问题深入分析(二):print打印中文异常及显示乱码问题分析与解决

    展开全文
  • 最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。 (这段代码是去除字符数组里面重复数组元素) #include "header....

    最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。

    (这段代码是去除字符数组里面重复数组元素)

    #include "header.h"
    extern int CountLength(char name[],int len);
    
    int DealArray(char num[]){
    	printf("你输入的逻辑表达式的操作数(去除重复操作数):");
    int v=0;
    int g=CountLength(num,v);
    int i,j,k,L;
    	
    for(i=0;i<g;i++)    //冒泡循环
    {
        for(j=i+1;j<g;j++)
        {
            if(num[j]==num[i])    //如果发现重复
            {
                for(k=j+1;k<g;k++)
                {
                    num[k-1]=num[k];    //将后面的数依次赋值给前一个位置
                }
                g--;    //数组长度-1
                j--;    //重复点再次进行查重
            }
        }
    }
    
    for(L=0;L<g;L++){
    printf("%c",num[L]);
    }
    printf("\n");
    
    return OK;
    }
    
    int main(){
    	char n[]={'B','B','B','B','D','E'};
    DealArray(n);
    }
    
    
    

    运行结果:

    你输入的逻辑表达式的操作数(去除重复操作数):BDE虁

    解决方法是在数组后面加一个'\0',数组结束符号

    如果是在测试的话,在你自己输入的数组后面加一个'\0'数组元素

    int main(){
    	char n[]={'B','B','B','B','D','E','\0'};
    DealArray(n);
    }

    如果是用for循环为数组赋值的话,记得在for循环结束后,为最后一个数组元素赋值'\0'

    for(i=0;i<g;i++)    //冒泡循环
    {
        for(j=i+1;j<g;j++)
        {
            if(num[j]==num[i])    //如果发现重复
            {
                for(k=j+1;k<g;k++)
                {
                    num[k-1]=num[k];    //将后面的数依次赋值给前一个位置
                }
                g--;    //数组长度-1
                j--;    //重复点再次进行查重
            }
        }
    }
    num[g]='\0';

     

    展开全文
  • vs2017默认编码方式并不是UTF-8,当我们使用中文时,经常会发生乱码。 解决方法:工具->扩展和更新->联机,然后搜索ForceUTF8,如下图: 安装后源码文件会强制保存为带BOM的UTF-8,如下图: 再次运行程序就...

    Visual Studio提供高级保存选项功能,它能指定特定代码文件的编码规范和行尾所使用的换行符。在Visual Studio 2017中,该命令没有默认显示在“文件”菜单中。用户需要手工设置,才能显示该命令。操作方法如下:

    (1)单击“工具”|“自定义”命令,弹出“自定义”对话框。
    (2)单击“命令”标签,进入“命令”选项卡。
    (3)在“菜单栏”下拉列表中,选择“文件”选项。
    (4)单击“添加命令”按钮,弹出“添加命令”对话框。
    (5)在“类别”列表中,选择“文件”选项;在“命令”列表中,选择“高级保存选项”选项。
    (6)单击“确定”按钮,关闭“添加命令”对话框。
    (7)选中“控件”列表中的“高级保存选项”选项,单击“上移”或者“下移”按钮,调整该命令的位置。
    (8)单击“关闭”按钮,完成“高级保存选项”命令的添加操作。



    再次运行程序就不会出现中文乱码了。


    展开全文
  • C语言文本文档汉字乱码处理问题

    千次阅读 2020-09-23 23:00:00
    改变命令行控制台的默认参数似乎比较困难,而且经不起调试,我调了几次之后,直接把命令行给弄得不显示输出了。所以还是改变.txt的编码方式更方便。 打开文件之后点击文件,点击另存为,这时候在界面的下方偏右会...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #include #include #include #include int main(void){int correct = false;char anothergame = *Y*;int counter = 0;int sequencelength = 0;...
  • vscode C语言中文输出乱码问题的解决

    千次阅读 2020-08-03 10:53:43
    西八气人跟着有些博主配环境改...1.原因:utf-8和gbk不兼容然后乱码 2.解决办法: 打开文件–首选项–设置–文本编辑器–文本 把utf-8改成改2312 3.然后重启vscode,新建一个文件的时候默认的编码就是gb2312了。 ...
  • 解决: 1: 安装ConvertToUTF8插件 2: 按CTRL SHIFT C 快捷键 3: 截图 4: 注意 这种办法也有缺点,就是只能先改为GBK,再输入文字,而不能在先有文字的情况下设置GBK直接实现转换。 ...
  • ubuntu下C语言中文输出乱码

    千次阅读 2013-05-06 22:30:56
    转自:http://blog.chinaunix.net/uid-26696487-id-3384346.html使用printf输出中文时,如果显示乱码一般是终端编码和代码编写时用的编码不匹配,可以更改终端编码,也可以修改程序编写时的编码。 终端编码修改为...
  • c语言中使用printf函数输出中文出现乱码,有什么解决办法吗,我以前在网上看到有在命令行 直接更改格式编码的,不过现在忘了,找不到了,有大神能解决吗,就是有没有像 gcc coding=utf-8 xx.c这种类型的直接修改...
  • C语言之printf输出中文乱码

    千次阅读 2020-11-12 15:30:28
    C语言之printf输出中文乱码不同编辑器问题解决方案Clion编辑器 不同编辑器问题解决方案 根据不同的编辑器的表现进行针对性的处理。 Clion编辑器 按照以下步骤操作编辑器设置即可: File->Setting ,打开设置...
  • VSCODE C语言终端输出中文乱码编码设置

    千次阅读 多人点赞 2020-07-14 22:01:31
    VScode解决终端输出乱码问题 上大学来一直用dev写c,最近想转vscode,发现一个问题,vscode中终端输出时会遇到乱码情况
  • 在main( )的开始添加: system(“mode con cp select=65001”); 即可解决输出乱码的问题。 添加后如下图所示:
  • C语言字符串输出中文乱码

    千次阅读 2019-11-30 00:37:27
    字符串复制输出字符串中文乱码,字符串长度大于复制的字符串,未加'\0'结束标志
  • 为解决Windows10下visual studio2019写C语言控制台输出中文乱码问题,我找了好久编码问题,终于知道怎么解决了,步骤如下: 1.首先打开windows10的控制面板,在搜索栏输入region。 2.点击出现的区域选项,然后点击...
  • 比如 printf("沙发斯蒂芬是”)这一句输出就是乱码,既不是汉字,也不是繁体字 求解
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #include #include #include #include int main(void){int correct = false;char anothergame = *Y*;int counter = 0;int sequencelength = 0;...
  • 将下面的代码复制到记事本里吧,另存为扩展名为“.reg”的文件,双击导入注册表就完成了 CMD 环境中汉字输入和汉字显示的恢复。 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\...
  • c语言输出0.000000或乱码,深究

    千次阅读 2019-10-07 12:04:42
    ——原因就是:输入控制符是【%f】,申请的数据内存类型是【double】,输出的又是【%f、%d】,乱用数据类型导致内存写入、读取方式的不匹配,从而导致0或者乱码。 1.错误汇总及解决 一、格式控制符、数据类型...
  • 建立C语言工程汉字可以正常输入和输出 ![图片说明](https://img-ask.csdn.net/upload/201903/09/1552106141_350234.png) ![图片说明](https://img-ask.csdn.net/upload/201903/09/1552106148_997241.png) ...
  • <p>#include<stdio.h> #include<stdlib.h> struct Student {<!-- -->  int num;  char name[10];  float score[3];  float aver;... </p>
  • 输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大。 解决办法 将文本编码格式改成ANSI即可。 打开记事本->文件->另存为->更改编码格式->保存 ...
  • sublime编译运行c语言后中文乱码的解决

    万次阅读 热门讨论 2016-09-06 18:28:14
    tools>Build System>New Build System中写入 { "cmd": ["g++", "${file}", "-std=c++11", "-fexec-charset=gbk","-o", "${file_path}/${file_base_name}", "&", "start", "cmd", "/c", "${file_base_name} & echo....
  • C语言读取汉字字模

    千次阅读 2016-01-13 23:40:18
    感谢的博主的文章! 前不久,在网上看到一个生成点阵字的网站。觉得很有意思! 到底什么是点阵字,点阵字和字模之间有什么关系?...让我们先看一个点阵汉字和一个英文字母:  **   ******************
  • c语言读取汉字字模

    千次阅读 2014-02-14 10:57:15
    前不久,在网上看到一个生成点阵字的网站。觉得很有意思! 到底什么是点阵字,点阵字和字模之间有什么关系?...让我们先看一个点阵汉字和一个英文字母:  **   **************************   **   **   
  • 最近在网上看到很多人问,为什么用Linux编译C语言或者C++代码是,汉字输出乱码。对此问题,网上有很多解决办法,其中有些办法很有效,但对于刚刚接触C语言或者Linux系统的小白来说,部分办法很难理解。下面,逼着...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,169
精华内容 867
关键字:

c语言输出汉字乱码

c语言 订阅