當前位置:首頁 » 編程語言 » 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輸出時,符號的長度要為偶數位元組。