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://fishc.com.cn/thread-66471-1-1.html

posted @ 2020-06-30 16:13  江湖小小白  阅读(1247)  评论(0编辑  收藏  举报