本文目錄一覽:
c語言輸出亂碼,求解決方法
輸出亂碼的原因見下圖標紅的地方:
第一個標紅處的for循環語句後面多了分號; 導致下面{}中的語句與for無關
而printf()語句中的i此時等於N,又stu[N]上沒有數據,所以會輸出亂碼;
同理後面輸出最高成績學生時,i的值也為N,因此最後打印stu[i]時也會輸出亂碼;
我覺得你的本意應該是輸出stu[no],所以要將最後printf中的stu[i]都改為stu[no]
但上面用no記錄成績最高學生下標的語句no=i; 應該寫在if內,即要如下修改:
if (maxstu[i].ave) {
max=stu[i].ave;
no=i;
}
還要注意max的類型應該為float,no應該賦初值0,因此前面要改為:
float max;
max=stu[0].ave;
no=0;
最後,建議將struct student結構體的定義放在main()函數之外
如果幫到你,給個採納哈~
C語言問題,為什麼輸出總是亂碼
看一眼就知道。。亂碼是因為你的指針沒有賦NULL,是野指針,指向了不明區域,所以會出現亂碼,以後定義指針最好int
*a
=
NULL;這樣子
為什麼C語言輸出文件內容亂碼
這種文本文件,不能直接使用讀到結構的方法。因為結構里會有非文本的控制符,比如字符串結束符’\0’。
一般使用直接讀到結構的方法,只限於二進制格式的文件,並且最好是讀自己創建的文件,別人創建的,格式剛剛好合適創建結構的也很少。
你這個亂碼,你的文件里,學號長度為10個字節,所以你定義學號這個變量時,必須定義11個字節的長度,因為字符串的變量,必須要有一個’\0’作為結束,不然的話,顯示的時候,沒有結束符就會接着往下顯示,就會有亂碼出現。
如果僅僅是這三行的話,倒也能使用結構來讀,比如結構里定義num[11],讀完後執行一下num[10] = ‘\0’;給它補一個結束符。但如果有人叫“王老四”,名字有的是2個字,有的是3個字這樣,你這個就不好判斷了。
這種文本,最好是使用fscanf(“%s %s %s %s %s”, num, name, sex, date, major)的形式來讀取。每次讀取一行。(注意字符串定義變量時,長度一定要多加1位)。
我的C語言程序運行後為什麼是亂碼?
有幾個小問題:
第一:c語言一般不支持中文,如果你用vc6.0++就是無法打印中文,一定會亂碼,建議用英文;
第二:如果你用的c語言編譯器支持中文,如devc++,則可以使用中文;
第三:我們的使用的字符格式,最多的是UTF-8,把默認代碼頁格式改為UTF-8試試吧
希望我的分享對你有用,感謝採納
C語言為什麼會出現亂碼?
完全沒看懂你的程序。
有明顯的幾個奇怪的地方。
int time = { 1 };
unsigned int k = { 0 };
這兩句不符合C語言語法吧,大括號一般很少用的,一般用在數組上,但是你的變量明顯不是數組啊。
k = (unsigned int)malloc(sizeof(unsigned int) * time);
malloc函數,返回的是指針吧。你強制轉換的不是指針啊,一般沒人這麼用,沒看懂,為什麼要強制轉換成unsigned int ?應該寫錯了吧,是 unsinged int *吧。
p = getchar();//
沒看懂,這裡為什麼要getchar,是因為怕有髒東西嗎?這裡會出問題的,但是代碼看不出會發生什麼問題。
scanf_s(“%d”, k, 8);
這裡最好改成這樣吧,scanf_s(“%d”, k, sizeof(unsigned int));這樣比較安全,反正你要的是int,直接用sizeof,算出int的字節數就可以了,不用自己知道int是多少個字節,這樣可以避免出錯。
key[i] = { 0 };
這裡則是,完全看不懂,因為不知道key是什麼,只知道是個key的數組,是什麼類型的,完全沒懂,只知道初始化為0。
key[i] = k; 這裡完全沒看懂,只能猜了,循環32次,k是一個int的數,一般是4個字節的數,每個字節是8位,所以一個int是32位,你循環32遍,看起來是想把這個int數,一位一位的輸出的樣子。但是前面k是用mallco申請,k應該是個指針,不是int變量。直接把指針給一個數組,有點奇怪,所以應該是key[i]=*key;但是看起來,你是要一位一位的數據,而不是一整個int數,但是這裡有個問題,我不知道,你是要低位先出,還是高位先出,而且C語言,想要一位一位的數據,要使用,左移和右移指令(這裡不是C++,所以沒有被C++的std::cout復用於輸出,這是個標準C語言的底層操作符,一般嵌入式的用的多,IT用的少,所以一般不常用),所以一位一位的輸出應該寫成key[i]=(*k)1;或者key[i]=(*k)1,這樣是分別是左移一位,右移一位後,把數據給key的數組,這裡,要根據你自己的代碼要實現的功能,去調整。
printf(“%d”, key); 我不知道,你是想輸出位數據,還是什麼。如果想看位數據,應該輸出二進制的數不就好了。而不用輸出int型數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/255094.html