有關有scanf及printf的一些誤區及問題

2021-06-06 00:39:24 字數 1442 閱讀 3775

今天我一直在除錯自己的順序表乙個scanf語句**如下:

printf("please input  list:"); 

for(i = 0;i < max;i++)

printf("please choose: ")

當我輸入lzm時,我通過除錯才知道我所有輸入的數全都是0,這時我無法理解,本來我輸入了lzm為什麼編譯器把他們當作全是0來處理呢?

於是我自己有變了小的程式看看是不是scanf的問題或是printf問題,**如下:

#include main()

以下時我輸入的一些數及產生的結果:

please input num:

a,athe a and c 's result is:a

0

please input num:

a,1the a and c 's result is:a

1

通過上面兩個結果我似乎得出這麼乙個結論:

char格式的只能輸出字母,而int型別的只能輸出阿拉伯數字。

於是我有猜想如果時其他的輸入的字元呢?

於是有:

please input num:

(,}the a and c 's result is:(

0

於是乎產生了下面這個結果

於是我又對照這ascii輸入字元,有如下:

please input num:

a,48

the a and c 's result is:a

48

please input num:

48,a

the a and c 's result is:4

0

please input num:

%,^the a and c 's result is:%

0

從中我得出這麼乙個結論,在gcc編譯器中如果某個數時int型別的那麼它只能輸出數字0-9,對於其他的字元它將輸出0;

對於char型別的輸出的除了輸入阿拉伯數字外,其他的字元都能列印出來,而對於阿拉伯數字,起輸出什麼都沒有:

於是乎我覺得這它不給力了,為什麼int型別不行輸出其他字元呢?為什麼呢?我無賴,坐在電腦桌前一直想,int型別什麼時候只能輸出阿拉伯數字了,那麼自然時數字幹嗎在

32位的機器上給每個int型別的字元分配四個位元組,這不是浪費空間麼?不就是乙個數字麼,跟其他的字元有什麼區別嗎?為什麼給每個char型別的字元只分配乙個位元組,這

公平麼?

我一直在猜想,,,,希望有解答。。。

scanf與printf使用詳解

scanf 格式控制 變數位址 如 scanf d n 其中n為變數,在定義完成乙個變數後,系統會為該變數分配記憶體空間 該空間在記憶體中的位址稱為變數的位址。為了得到變數的位址可以使用取位址操作 scanf的格式符如下 資料型別 格式符int dlong long lld double lfflo...

scanf和printf的用法

scanf和printf的用法 printf是標準輸出函式 scanf是標準輸入函式 printf的格式為printf 輸出內容 scanf的格式為scanf 輸入控制符 輸入的變數位址 n表示變數n的位址 表示取址符 用在變數前獲得變數的位址 你寫的這兩句前面是顯示please input the...

scanf與printf的強大

習慣了用c 常常會忽略了scanf和printf在某些題的巧妙或是便捷之處。1.scanf 很多題目要求的輸入,一般是整數 字串或陣列,一般用cin就可以 但當我們輸入乙個字串,有時我們可以根據題目要求,將字串既輸入數字又輸如字元甚至其他固定符號比如正負號小數點時,我們可以用scanf輸入。例如pa...