2013-07-14 31 views
1

我只是無法得到它。 Char是一個整數,對不對?所以我可以做scanf並保留字符作爲整數

int var; 
scanf("%d", &var); 
I:[65] 
printf("%c", var); 
o:[A]. 

爲什麼那麼wrog做:

char var; 
scanf("%d", &var); 
I:[A] 
printf("%d", var) 
O:[-1236778] 
+0

因爲'%d'需要一個'int *',而不是'char *'? –

+0

但字符保持爲整數? – zubergu

+0

'char' **是一個整型數據類型,但是**並不意味着它與'int'相同。 –

回答

1

在第二scanf()

scanf("%d", &var); 

scanf()解析的打印指令%d。這意味着參數&var預計爲int的地址。而是給出了一個char的地址。 int的尺寸肯定大於char的尺寸。由於scanf()試圖將一個int大小的數據放到一個僅用於'char'的地方,所以對於scanf()可能會發生奇怪的事情,可能會將數據放在它不應該放置的地方。試圖將10磅粉紅土豆放入5磅大袋中。

此外 - scanf("%d", &var);成功讀取輸入「A」似乎令人懷疑。 scanf()會看到A,並且由於它不是數字,因此會放棄掃描符合int定義的文本輸入。因此,您的scanf("%d", &var)可能返回的值爲0,因此沒有任何東西var中。如果保存了培根,它會將數據放在它不應該放置的空間中。

最終printf("%d", var)然後簡單地打印出其從未設定var,使您得到任何恰好是焦炭。 -1236778似乎不太可能。我懷疑這個帖子與代碼和輸入/輸出不匹配的速度都很小。

+0

感謝您的評論和一些關於數據類型和scanf函數的額外閱讀,感覺就像我明白了。最後:) – zubergu

+0

歡迎來到SO .. – chux

相關問題