在程序中要使用輸入輸出函數(printf 和 scanf),就必須要包含 stdio.h 頭文件。
一、格式轉換符
整型
控制符 | 說明 |
---|---|
%d 或 i% | 有符號十進制整型(int、short、char) |
%hd | 短整型 |
%ld | 長整型 |
%lld 或 %l64d | 64 位整型 |
%u | 無符號十進制整型(unsigned) |
%o | 無符號八進制整型 |
%x 或 %X | 無符號十六進制整型,x 小寫對應的十六進制為小寫,X 大寫對應大寫 |
實型
G/E 格式表示的指數形式中 E 大寫
控制符 | 說明 |
---|---|
%f | 十進制單精度浮點數(float),默認小數部分超過 6 位的四舍五入 |
%lf | 小數形式雙精度實型 |
%e 或 %E | 指數形式單精度實型,le 同理 |
%g 或 %G | 系統自動選定 f 或 e 格式,使輸出的寬度最小,且不輸出無意義的 0 |
字符型
控制符 | 說明 |
---|---|
%c | 一個字符 |
%s | 字符串 |
其他
控制符 | 說明 |
---|---|
%md | m 為指定的輸出字段的寬度。如果數據的位數小於 m,則左端補以空格,若大於 m,則按實際位數輸出 |
%.mf | 輸出實數時小數點后保留 m 位,注意 m 前面有個點 |
%p | 指針 |
%% | 輸出 % |
另外可以在格式轉換字符和 % 之間插入一些輔助的格式控制字符
# [] 表示可以省略 格式:%[flag][width][.precision][size]Type
width 和 precision 必須是無符號整數
二、printf
格式控制字符的個數要與實際輸出的個數相等,多出的格式控制符會隨機輸出
printf("%d\t%d", 100); // 100 1378561
輸出時表達式的計算是從右往左
int i = 1; printf("%d, %d, %d\n", i, i + 1, i = 3); // 3, 4, 3
格式轉換符所表示類型和表達式的實際數據類型不同時,printf 函數不會對數據類型自動轉換
有符號整數
# [] 表示可以省略 格式:%[-][+][0][width][.precision][l][h]d -:左對齊,默認右對齊 +:正數前加 "+" 0:右對齊,實際寬度 < width,左補零 width:最小寬度,實際寬度超過 width,則按照實際寬度輸出 .precision:至少輸出位數。若實際的位數 > .precision,按實際輸出,否者左邊補零 l:輸出長整型(long) h:輸出短整型(short)
無符號整數
# [] 表示可以省略 # | 表示互斥 格式:%[-][#][0][width][.precision][l][h]u|o|x|X -:左對齊,默認右對齊 #:以八進制(%o)輸出時,在數字前輸出 0,以十六進制(%x 或 %X)輸出時,在數字前輸出 0x 或 0X 0:右對齊,實際寬度 < width,左補零 width:最小寬度,實際寬度超過 width,則按照實際寬度輸出 .precision:至少輸出位數(VC 下不包含 0x 或 0X 所占位數)。若實際的位數 > .precision,按實際輸出,否者左邊補零 l:輸出長整型(long) h:輸出短整型(short)
實數
# [] 表示可以省略 # | 表示互斥 格式:%[-][+][#][0][width][.precision][l|L]f|e|E|g|G -:左對齊,默認右對齊 +:正數前加 "+" #:必須輸出小數點 0:右對齊,實際寬度 < width,左補零 width:最小寬度,實際寬度超過 width,則按照實際寬度輸出 .precision:規定輸出實數時,小數部分的位數(四舍五入) l:輸出 double 型(默認也是輸出 double 型) L:輸出 long double 型
字符和字符串
# [] 表示可以省略 字符格式:%[-][0][width]c 字符串格式:%[-][0][width][.precision]s -:左對齊,默認右對齊 0:右對齊,實際寬度 < width,左補零 width:最小寬度,實際寬度超過 width,則按照實際寬度輸出 .precision:只輸出字符串前 precision 個字符
三、scanf
&:取地址運算符,只能作用於變量,不能作用於表達式 # [] 表示可以省略 # | 表示互斥 格式:%[*][width][l|h]Type *:抑制符,輸入的數據不會賦值給相應的變量 width:指定輸入數據的域寬,遇空格或不可轉義的字符則結束 l:用於 d、u、o、x|X 前,指定輸入為 long 型整數,用於 e|E、f 前,指定輸入為 double 型實數 h:用於 d、u、o、x|X 前,指定輸入為 short 型整數 Type:各種格式轉換符
指定域寬時,輸入的多余部分會被舍棄
一個數據輸入結束:空格、回車、Tab、域寬結束、非法輸入(%d,輸入 12a3,則值為 12)
非法輸入會影響后面輸入,導致數據輸入失敗(d%,d%,輸入12a34,b 的值無法預測,正確應輸入 12,34)
使用 %c 錄入字符數據時,空格和轉義字符均作為有效字符被輸入
四、字符數據的非格式化輸入輸出
輸入
getchar() | 接受一個字符輸入,以回車結束,回顯 | stdio.h |
getc(FILE *stream) | 從輸入流中接受一個字符,以回車結束,回顯 | stdio.h |
getche() | 接受一個字符輸入,輸入字符后就結束,回顯 | conio.h |
getch() | 接受一個字符輸入,輸入字符后就結束,不回顯 | conio.h |
輸出
int putchar(int c) | 輸出形參 c 所表示的(ASCII)字符,出錯返回 EOF(-1) | stdio.h |
int putc(int c, FILE *stream) | 將形參 c 所表示的字符輸出到文件流 stream,如果流為 stdout 則功能與 putchar 完全相同 | stdio.h |
int puts(char *string) | 輸出形參 string 所代表的字符,然后自動回車換行 | stdio.h |
int fflush(FILE *stream)
更新緩沖區,強迫將緩沖區內的數據寫回參數 stream 指定的文件中,如果參數 stream 為 NULL,則將所有打開的文件數據更新
參數流為 stdin 時,刷新緩沖區,把緩沖區里面的內容丟掉
參數流為 stdout 時,刷新緩沖區,把緩沖里面的內容輸出到設備
https://zh.wikipedia.org/wiki/Stdio.h