C語言,為什麼3出不來

2022-04-29 12:11:47 字數 2137 閱讀 9519

1樓:匿名使用者

這個問題我本來是沒見過的,所以我試了一下,發現%c輸出300,是一個逗號,而輸出400,是一個問號,併吞掉問號後的一個字元,比如我用printf("%c3",400);就會只輸出一個問號,但是%c33,就會輸出一個問號和一個3,這個我沒有辦法解釋,因為400已超過ascii碼範圍,所以這個輸出是由編譯器自己或某些法則或運算方式決定的,無法****,所以正常編輯**時還是要按照標準進行操作,否則極可能產生奇怪的無法預知的各種情況。

望採納,謝謝

2樓:

這跟printf函式工作方式和控制檯使用的字符集有關。

c1=300=0x12c,c2=400=0x190,c1和c2都是int型別,佔4位元組。

但printf根據轉換格式"%c",只需讀取一個位元組。讀取哪個位元組呢?因為c1和c2是變數,本身就代表一個地址,所以只要讀這個地址就好了,學過彙編就知道。

加上位元組序的關係,最終printf讀取的就是最低位位元組的資料。

於是printf讀取c1的低位元組即0x2c輸出到控制檯,0x2c在ascii碼裡是逗號',',所以第一個字元是逗號。

接著輸出空格。

然後printf讀取b的低位元組即0x90,一般中國電腦用的是gbk字符集(相容ascii碼)0x90在ascii碼錶和gbk內都是不存在的。字符集不存在這個字元,也就無法顯示。

printf("%d %d",c1,c2);

printf把c1輸出為數字字元,第一個字元是3,ascii碼是0x33,系統把上一個解析不了的字元0x900x33組合成0x9033解析,仍然沒有對應的字元,因為gbk字元編碼最多隻有兩位元組。於是這兩個位元組便用?問號代替,表示字元解析失敗。

因此0x33就沒有被單獨解析成'3'這個字元,而是和0x90組合成一個解析失敗的字元'?'。

3樓:小黑哎啊

#include

int main()

int c1,c2;

c1=300;

c2=400;

int a=65,b=97;

printf("ascii碼為%d對應的字元:%c\n",a,a);/*當一個(int)整型數以(字元佔位符)%c為佔位符輸出時,該整型數就會被當成一個字元的ascii碼,並且輸出該字元;*/

printf("%d %c",b,b);/*第一個b佔位符是%d(int),輸出整型97;第二佔位符%c(char),輸出字元a;*/

printf("%c %c\n",c1,c2);/*ascii碼為300的字元不存在;ascii碼最大到128;這一個語句輸出錯誤,或者什麼也不輸出;*/

printf("%d %d",c1,c2);//輸出300,400;

return 0;

4樓:gta小雞

printf的格式符和引數型別必須對應,否則是未定義行為。

格式符%c對應的是char型引數,不能使用%c輸出int型資料。

5樓:匿名使用者

你電腦有毒吧,我也很好奇這個問題,研究了半天決定自己寫一遍驗證一下,發現沒毛病呀

6樓:匿名使用者

%c ?不對,c1,c2是整型變數,不行,用%i或%d,望採納。。。

7樓:匿名使用者

因為300 400已經超過ascii碼最大127的範圍所以出不來。請好好研究下char的範圍吧

我編了一個比較三個數大小的c語言程式,編譯顯示沒錯誤,但執行起來出不來結果,想問問是**錯了

8樓:匿名使用者

void main()

a>b>c

會先判斷a>b

如果a>b則返回1,否則返回0

再將這個返回值與c比較

為什麼困在噩夢中出不來,為什麼困在噩夢中出不來我老是做噩夢。而且一做噩夢就大喊大叫。明知道自己在做噩夢,還是害怕,而且

可能是你最近的壓力太大了吧,別想太多了,別給自己那麼大的壓力,要注意放鬆 為什麼我最近連續四個晚上做噩夢 並且都在凌晨三點半左右被嚇醒 有次做噩夢在現實中差點把自己掐死 曾經我也有過掐著自己,把自己掐醒。前段時間 經常做夢,什麼夢都有,夢著夢著就醒了,一般都是在三點左右,而且是看到床邊有一個穿壽衣而...

c語言中,inta 3,b 2,c 1,為什麼賦值語句a b c 1錯誤了

賦值語句沒有錯,錯的應該是變數的說明語句 inta 3應該在變數與型別說明符間加空格以示區別 int a 3,b 2,c 1 沒有錯啊。include int main inta 3 這個連起來寫已經錯了。當然,排除你是筆誤。a b c 1,是合法的。沒有錯誤。在vs 2010中可以編譯通過。因為a...

c語言中,int i 3,k iii為什麼執行結果是後k 9,i 6?求解

這裡涉及到運來算順序的 源問題。i 指先使用i的值,再將i加一。所以,k先等於三個i相加,結果是k 9。i的值使用完畢後,再從第一個i 開始,對i加一,此時i 4 對第二個i 使i加一,此時i 5 最後對第三個i 使i加一,此時i 6。這個是因為 i 不bai 就是以dui的值來算嗎?加法是從左zh...