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

c语言输出汉字乱码怎么解决

发布时间: 2022-07-06 16:00:07

A. 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。另外文件最好用宽字符的。就可以避免乱码了。

B. C语言栈的操作时不能正常输出,输出乱码,如何解决

代码不完整。可能是printf操作了中文了。
关于中文的输出应该使用wprintf,中文字符串常量应该使用 L"中文" 的格式,还需要包含string.h 以及 locale.h,并且需要在wprintf调用前调用setlocale(LC_ALL, "chs");

C. C语言运行的时候汉字全部乱码怎么回事

看你这图比较面熟,你是不是用的Code::Blocks?
如果是的话:
这是CodeBlocks编译器设置问题,在CodeBlocks菜单选择
Settings
->
Compiler
and
debugger
settings
->
Global
compiler
settings
->
Other
options
,在其中输入语句
-fexec-charset=GBK
-finput-charset=UTF-8

D. c语言输出字符串为什么是乱码

你几个地方写错了,我在里面有注释,分别有:
1、赋值地方,应该是a[i][j],这里i、j代表第几个,你用student这些固定值,一看就知道错了不是吗?而且这是个非常严重的错误,a[i][j]这里面i不能等于student,j不能等于subiects,你们下标取值0到student-1,你自己写完看看都知道错了
2、sum每次循环前要赋0,否则会把前一个学生的成绩加进去
3、ave=sum*1.0/4,不乘1.0的话,系统会把sum/4当成一个整型,会造成结果不正确
#include
#define subiects 3 //学科数量
#define students 4 //学生人数
int main(void)
{
int a[students][subiects] = { 53,54,76,87,89,56,76,85,45,75,76,45 };
int i = 0, j = 0, sum = 0;//sum为总分
double ave;//ave为平均值
//输入成绩

for (i = 0; i < students; i++)
{
printf("请输入学生%d的%d科成绩:", i + 1, subiects);//i+1为学生序号
for (j = 0; j < subiects; j++)
{
scanf("%d", &a[i][j]);//students=4,subiects=3,你觉得a[4][3]赋值是赋给谁?下面同样错误
}
}
//输出成绩
printf("\t\tC语言\t大英\t高数\t总分\t平均分\n");
for (i = 0; i < students; i++)
{
sum=0;//每次都要赋0,否则会把前面同学成绩加进去
printf("\t同学%d", i+1);
for (j = 0; j < subiects; j++)
{
sum += a[i][j];//错误
printf("\t%d", a[i][j]);//错误
}
ave = sum*1.0 / subiects;
printf("\t%d\t%.2f\n",sum,ave);
}
printf("\n\n");
//颠倒输出
sum = 0;
ave = 0;
printf("\t");
for (i = 0; i < students; i++)
printf("\t同学%d", i + 1);
printf("\t平均分\n");
for (j = 0; j < subiects; j++)
{
if (j == 0)
printf("\tC语言");
if (j == 1)
printf("\t大英");
if (j == 2)
printf("\t高数");

sum=0;//赋0
for (i = 0; i < students; i++)
{
sum += a[i][j];//错误
printf("\t%d", a[i][j]);//错误
}
ave = sum*1.0 / students;
printf("\t%.2f\n",ave);
}
return 0;
}

E. 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。另外文件最好用宽字符的。就可以避免乱码了。

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

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

G. 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;
}"

H. c语言问题,输出结果是乱码

你在定义x结构体的同时,已经定义了一个x型的全局变量student1并赋了初值,然而,你的main函数里又定义了同名的局部变量student1并没有赋初值。main函数执行时,这里的student1是未赋初值的,所以student1.name的值并不是"星哥",你以%s输出它,自然会显示为“乱码”。

改正方法是,既然你已经定义了全局变量,main函数里就不要再定义了。

#include<stdio.h>
#include<string.h>

structx{
charname[10];
intage;
charaddress[10];
charsex[10];
}student1={"星哥",20,"天水","女"};

intmain(){
/*structxstudent1;注释掉这一句就会是正常的*/
printf("%s ",student1.name);

return0;
}

运行结果

I. C语言编程出现汉字输出乱码现象

C语言中一个汉字是由两个字节来表示的
而C语言编程主要是以字节为单位来显示
所以你的C语言输出中,如果汉字显示只显示了一个字节,就会有乱码出现了
正常的做法是,你的printf输出时,符号的长度要为偶数字节。