當前位置:首頁 » 編程語言 » 怎麼解決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部分是文本。