一開始學習就是用的cin、cout,所有習慣用這個,但是后來做題發現這樣的輸入方式有弊端,所以決定整理熟悉一下scanf函數與printf函數。
頭文件
# include <stdio.h>
scanf("輸入控制符",輸入參數)
- 在 scanf 的“輸入參數”中,變量前面的取地址符
&
不要忘記。 - scanf 中雙引號內,除了“輸入控制符”外什么都不要寫。
- “輸出控制符”和“輸出參數”無論在“順序上”還是在“個數上”一定要一一對應。
- “輸入控制符”的類型和變量所定義的類型一定要一致。
// scanf 的"輸入參數"中,變量前面的取地址符 &不要忘記 scanf("%d", &i); //輸入一個整型數據 scanf("%f", &i); //輸入一個浮點數 scanf("%c%c%c", &i, &j, &k);//字符
字符串:輸入參數是已經定義好的"字符數組名", 不用加&, 因為在C語言中數組名就代表該數組的起始地址
scanf("%s",string);/*不能接收空格符*/ scanf("%[^/n]",string); scanf("%[^\n]",str);//直到輸入回車鍵,讀取才結束,當然不能超過str定義的大小,否則會出錯。 // 此命令與gets(str)效果一樣。
常用的輸入並判斷
while(scanf("%d",&n),n)//當n為0時中止循環
printf("輸出控制符",輸出參數)
//“輸出控制符”和“輸出參數”無論在“順序上”還是在“個數上”一定要一一對應。 printf("%d\n", i); printf("%d %d\n", i, j); printf("i = %d, j = %d\n", i, j);
%x、%X、%#x、%#X 的區別
一定要掌握 %x(或 %X 或 %#x 或 %#X),因為調試的時候經常要將內存中的二進制代碼全部輸出,然后用十六進制顯示出來。下面寫一個程序看看它們四個有什么區別:
# include <stdio.h> int main(void) { int i = 47; printf("%x\n", i); printf("%X\n", i); printf("%#x\n", i); printf("%#X\n", i); return 0; }
輸出結果: 2f
2F
0x2f
0X2F
從輸出結果可以看出:如果是小寫的x
,輸出的字母就是小寫的;如果是大寫的X
,輸出的字母就是大寫的;如果加一個#
,就以標准的十六進制形式輸出。
最好是加一個#
,否則如果輸出的十六進制數正好沒有字母的話會誤認為是一個十進制數呢!總之,不加#
容易造成誤解。但是如果輸出 0x2f 或 0x2F,那么人家一看就知道是十六進制。而且%#x
和%#X
中,筆者覺得大寫的比較好,因為大寫是絕對標准的十六進制寫法。
轉義字符
printf 中有輸出控制符%d
,轉義字符前面有反斜杠\
,還有雙引號。
要輸出%d
只需在前面再加上一個%
,要輸出\
只需在前面再加上一個\
,要輸出雙引號也只需在前面加上一個\
即可。
# include <stdio.h> int main(void) { printf("%%d\n"); printf("\\\n"); printf("\"\"\n"); return 0; }