2 qq 18952005 qq_18952005 于 2016.03.13 16:18 提问

C编程输出中文为什么显示乱码

从词典文件中读取数据,输出的时候为什么显示乱码?
代码如下:
#include
2 #include
3
4 int main()
5 {
6 FILE *fp = fopen("text.txt","r");
7 char english[32],chinese[64],attribute[8];
8 int i=0,j=0,k=0;
9 int flag_null = 0, flag_p = 0;
10 while(!feof(fp))
11 {
12 char ch = fgetc(fp);
13 if(ch == ' ')
14 {
15 flag_null = 1;
16 }
17
18 if(ch == '.')
19 {
20 flag_p = 1;
21 }

22 if(flag_null!=1)
23 {
24 english[i] = ch;
25 i++;
26 }

27 else if(isalpha(ch)||ch=='.')

                               {

29 attribute[k] = ch;
30 k++;
31 }
32 else if(ch < 0)
33 {
34 chinese[j] = ch;
35 j++;
36 }
37
38 if(ch == '\n')
39 {
40 printf("%s %s %s\n",english,chinese,attribute);
41 }
42
43 }
44
45 fclose(fp);
46 }

text.txt文件内容
across   prep.横越 adv.横穿

输出:
across .??越横穿? prep.adv.??越横穿?

2个回答

renlong0829
renlong0829   2016.03.14 01:02
已采纳

汉字编码格式跟英文字符编码格式是不一样的。标准C语言库函数不能直接处理汉字。
%c,%s只能处理ASCII在[32,127]区间的字符输出。汉字编码超过这个范围了

googlecarp
googlecarp   2016.03.13 16:41

你看看你软件设置的编码是gbk还是utf-8之类的,复制字典的内容编码可能跟软件不匹配,试一下先复制到doc或者txt文件为纯文本试试再复制到编程软件中,或者检查编码是否匹配

qq_18952005
qq_18952005 我是在mac终端下写的代码,终端设置成utf-8格式,有个奇怪的现象,把text.txt中的prep删除一个字符,输出就正常了。一直找不到原因。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VS2017 输出中文时候乱码 vs2017 c语言输出中文乱码 解决办法
vs2017默认编码方式并不是UTF-8,当我们使用中文时,经常会发生乱码。 解决方法:工具->扩展和更新->联机,然后搜索ForceUTF8,如下图: 安装后源码文件会强制保存为带BOM的UTF-8,如下图: 再次运行程序就不会出现中文乱码了。
关于CB中输出汉字会变成乱码
昨天在机房做一个项目的时候,输出的时候里面的汉字全变成了乱码,重新创建一个发现也没有用,经过百度的方法一个个尝试后终于成功。duang~非常的开心啊,又可以愉快的贴图了~ 成功的方法如下: 1:从菜单Settings打开Compiler and debugger 2.在Compiler setting 上选择Other Option,添加-fexec-charset=GBK -finpu
C语言文件输入输出读取中文TXT文件出现乱码
今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下//倒序显示文件的内容 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define CNTL_Z '\032' //文件结尾标记 #define SLEN 81 int main() { char file[SLEN]; char ch; FILE *fp;...
CGI程序中文乱码问题
前几天写CGI程序的时候,从网页传回来的数据中包含汉字,结果汉字变成了乱码,形如%5B%5D。后来查询资料得知乱码是把字符的ASCII码变成%的形式,如%5B是'[', 它的ASCII码16进制就是0x5B,因此将乱码转换回来就很简单了。 #include #include #include char ToChar(char a, char b) { char c = 0;
VS中printf函数输出中文是乱码解决方案
VS中printf函数输出中文是乱码解决方案问题描述当我们使用VS2012进行编程时,常会出现:printf("生成的迷宫是:\n"); 然而点击控制台运行时,显示的结果却是: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失解决办法:打开当前源代码文件,把main函数框起来。 再点击菜单栏文件–高级保存选项—
CGI输出中文乱码解决方法
WebServer BUG解决
gcc 在控制台下中文输出乱码的问题
跟gcc无关,控制台环境本来就不支持中文 装一个zhcon或者cce就可以了fedora下#yum install zhconok~
C++ linux中文乱码
装好Ubuntu Kylin后,将windows代码拷贝到ubuntu下,发现如下问题 l  中文注释无法正常显示。 l  运行过程中,中文字符串比较失败。 百思不得骑姐。在查阅一番资料,多次测试后,确定这都是字符集的问题。 1.    中文注视无法正常显示 windows的默认编码方式是Ansi,而Ubuntu Kylin字符集默认是utf-8。字符集的不同直接导致ubuntu无法正常
Code::Blocks输出中文乱码问题解决方案
1.环境: Winsows7 IDE:Code::Blocks 16.01    编译器:GCC 2.问题描述: 在代码中使用 printf(“中文”);打印中文字符的时候,编译过后没有错误,可以运行,但是实际显示的时候是乱码。  网上的搜索答案,一般解决Code::Blocks中文乱码的方法几乎都是:settings -> compiler and debugger settings
解决Vs输出中文乱码的问题
源程序的运行结果是:中文乱码               首先,这个与VS本身无关,问题是出现在windows的dos显示设置上。               如何解决这个问题?                     1.打开运行,输入cmd;                                          2.界面顶部右键,选择默认值;