C printf、scanf 和格式轉換(控制、占位)符


在程序中要使用輸入輸出函數(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

https://dxoca.cn/StudyNotes/281.html

https://fishc.com.cn/thread-66471-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM