当前位置:首页 » 编程语言 » 怎么解决c语言乱码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

怎么解决c语言乱码

发布时间: 2023-05-29 20:54:45

c语言输出中文乱码

提几个建议。1)没给出str的大小,不知道你定义的多大。至少str要保证120以上。考虑用2的倍数最优可以char
str[122]并且因为系统将自动在最后加'\0'。最好设定读取121为好。以免读取半个中文字。2)fgets的用法问题。
追加返回值的判断为好。if(fgets(str,120,fp)!=null){
printf("%s\n",str);}3)关于出现乱码的问题,估计你的文件中有中文汉字。读取到119位的时候正好是某个汉字的前一半。要解决这个if(fgets(str,121,fp)!=null)
这里120
改成读偶数个121。另外文件最好用宽字符的。就可以避免乱码了。

❷ C语言控制台程序,中文输出变成乱码,怎么解决

这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK);Linux下根据系统locale设定,一般应该是(zh_CN.UTF-8).(以下基于简体中文Windows)
1)对于源文件中保存的"中文"这个字符串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默认ANSI编码得到).但编译器才不管是不是GBK神马的,它就管那串数字.
区别,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默认UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保存为UTF-8编码.
2)然后,在二进制文件中的存储形式,对传统的字符串(char str[] = "中文";),编译器什么都不做,直接把那串数字(如"0xd6d0","0xcec4")搬过去塞进二进制文件.
但对于宽字符串(wchar_t wstr[] = L"中文";),编译器会将其做转换,转换成Unicode编码格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然后把这串转换后的数字("0x4e2d","0x6587")塞进二进制文件中.(这里VS和MinGW做的没有区别)
这里有点需要注意,编译器必须知道你的源文件保存的编码!如VS默认是ANSI编码,如果你用UTF-8保存.c源文件去用VS打开看一定是乱码.同理如果你用mingw编译ANSI编码保存的源文件,也会出错!(但可以修改编译选项解决,见文章末尾) 在本文这里这个原因其实很好理解,因为编译器需要知道,如果它要将一个保存在文件中的字符转成宽字符时,是从什么编码转到Unicode.(可见上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)

❸ c语言运行结果乱码怎么解决

发你的代码看看
max与min没有初始稿咐拦化
还有就是简薯for语句后多了一个分号
修改后的代码键胡如下:
#include<stdio.h>
main()
{
int max,min,n,m,i;
printf("输入n:");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
printf("输入第%d个数:", i);
scanf("%d", &m);
if (i==1)
{
max=min=m;
}
else if(m>max)
{
max=m;
}
else if(m<min)
{
min=m;
}
}
printf("max=%d\nmin=%d",max,min);
}

❹ C语言 中文乱码解决

中埋轿文乱码问题:

环境:
Windows 10
VS Code 1.59.0

解决告吵方案:
点击右下角 utf-8,弯友肆选择打开 Reopen open with Encoding

选择 GB2312

❺ C语言,输出乱码问题。怎么办

"a[10]是在子函数中定义的,生命周期应当和子函数一样。出了子函数就会被销毁、
你在主函数中调出使用leftTag(input)后,a[10]是在子函数中分配的内存空间。回到,主函数后你还要引用那块被销毁了的内存。打印出来的肯定是乱码。
知道了问题的所在。相应的处理方法就是。增加a[10]所对应的内存空间的生命周期。
1、用malloc函数使在堆上分配内存。
#include
<string.h>
#include
<stdio.h>
#include
<malloc.h>
char
*leftTag(char
*s2)
{
char
*s1
=
(char*)malloc(10
*
sizeof(char));
//注意这里
strcpy(s1,"<");
strcat(s1,s2);
strcat(s1,">");
return
s1;
}
int
main()
{
char
*input="abc";
printf("%s",leftTag(input));
return
0;
}
2、a[10]在主函数中定义,生命周期自然就和主函数一样了。
#include
"string.h"
#include
"stdio.h"
char
*leftTag(char
*s2,char
*a[])
//
这改了
{
char
*s1;
strcpy(a,"<");
s1=a;
strcat(s1,s2);
strcat(s1,">");
return
s1;
}
int
main()
{
char
*input="abc",
a[10];
printf("%s",leftTag(input,a));
return
0;
}"

❻ c语言输出乱码,求解决方法

输出乱码的原因见下图标红的地方:

第一个标红处的for循环语句后面多了分号;导致下面{}中的语句与for无关

而printf()语句中的i此时等于N,又stu[N]上没有数据,所以会输出乱码;

同理后面输出最高成绩学生时,i的值也为销汪州N,因此最后打印stu[i]时也会输出乱码;

我觉得你的本意应该是输出stu[no],所以要将最后printf中的stu[i]都改为stu[no]

但上面用no记录成绩最高学生下标的语句no=i;应该写在if内,即要如下修改:

if (max<stu[i].ave) {

max=stu[i].ave;

no=i;

}

还要注意max的类型应该为float,no应该赋初值0,因此前面要改为:

float max;

max=stu[0].ave;

no=0;

最后,建议将struct student结构体的定义放在main()函数之外

如果帮到你,给个亏蔽采陵搏纳哈~

❼ C语言出现乱码

有两个问题:

一、变量a是float型,用%d输入输出会出错,可以考虑把变量d定义成int型;

二、姓名是字符串,不是字符,可以考虑用字符数组来存储。

修改如下:

#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta;
floatb,c;
chard[10];
printf("请输入你的姓名: ");
gets(d);
printf("请输入你的年龄: ");
scanf("%d",&a);
printf("请输入你的身高m: ");
scanf("%f",&b);
printf("请输入你的体重kg: ");
scanf("%f",&c);//以下代码测试输入的正确性
printf("姓名:%s ",d);
printf("年龄:%d ",a);
printf("身高:%.2fm ",b);
printf("体重:%.2fkg ",c);
return0;
}

❽ 我的C语言程序运行后为什么是乱码

有几个小问题:

  • 第一:c语言一般不支持中文薯肢,如果你用vc6.0++就是无法打印中文,一定会乱码,建议用英文;

  • 第二:如果你用的c语言编译器支持中文,如devc++,则可以使用中文;

  • 第三:我们的使用的字符格式,最多的是UTF-8,把默认消键代码页格式改为UTF-8试试吧

希望我的分享对你有用,拿手巧感谢采纳

❾ c语言打印字符串乱码,应该怎么办

1、字符串数组各字符单搏团个赋值的话,在每串最后一个字符之后添加 '\0',表示串结束了,输入时就没有多余的乱码了,因为gets()或scanf() 的%s都是主动在串结束后添加了 '\0'的。x0dx0a2、字符串使用前请使用清空语句把垃圾内存清理成'\0',也就是0x00(0):x0dx0amemset(str2, 0x00, sizeof(str2));x0dx0a当然,也可以在声明的时候进行初始化:x0dx0achar str2[20] = {0};x0dx0a这句也能实现同样的效果。这是C语言习惯,则伏务必养基盯橘成!x0dx0a'\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而程序明显没有字符串结束符,所以连同垃圾内存一起读出来了

❿ C语言输出的文件是乱码啊..求解

你这样写裂缓文件,只有name部分应该是可读的,其他都不应该可读旁雀。你为什么指望它能有“不乱码”运源早出现?只有文本才有乱码的说法,而你这里只有name部分是文本。