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