Bootstrap

C方式格式化输入输出(自行复习用)

本篇将重点介绍C语言的格式化输出函数 printf 和格式化输入函数 scanf 。当然该函数在C++程序中也可以使用。


目录

printf 函数构成及标准函数语句

格式字符种类的介绍

printf 函数的具体细节实现

格式符数量与输出表列不匹配

printf 返回值问题

格式控制符 / 附加格式控制符 的位置

其他需要注意的细节

scanf 函数构成及标准函数语句

格式控制符种类的介绍

Scanf 函数的具体实现细节

地址表列相关注意事项

格式控制符间有空格

格式控制个数与地址表列不同

scanf 函数返回值

scanf 输入终止条件


printf 函数构成及标准函数语句

printf ( 格式控制,输出表列 )

这里格式控制指又包含了格式说明和普通字符。格式说明多用于变量,以 %+格式字符 的形式,表示按照格式输出;普通字符就按照原样输出即可。

这里要注意的是,转义符在格式控制中作为普通字符,输出的是转义符转义后的字符。(如 \x21 输出的就是感叹号 !,\n 输出的就是换行)

输出表列指真正输出的数据,这个数据可以是变量、常量,也可以是表达式或是函数等。

举个栗子:

int a=10;
printf("%dxX\n",a);

 这段代码中 "%dxX\n" 就是格式控制,其中%d是一个格式说明,说明了这里要输出的一个数据的格式是十进制整数(格式字符 d 表示带符号的十进制整数,有关内容后面会重点说明),而后面的xX是两个普通字符,\n 属于普通字符表示换行。输出表列中的 a 与格式控制中的 %d 对应,所以在 %d 位置的实际输出就是这个 a 表示的数字10

最终输出为:

10xX

(还有一个空行)

格式字符种类的介绍

格式字符分为两种基本格式字符和附加格式字符。基本格式字符如下表:

d,i 带符号的十进制形式整数(符号带-,整数不带+)
o 八进制无符号形式输出整数(不带前导0,因为只输出最基本的内容)
x,X 十六进制无符号形式输出整数(不带前导0x)
u 十进制无符号形式输出整数
c 字符形式输出(一个字符)
s 输出一个字符串

f

以小数形式输出浮点数
e,E 以指数形式输出浮点数(科学计数法)
g,G 在 f , e 中选择宽度较短的形式输出浮点数

可以用以下代码加以验证:

int m = 10;
printf("%d %o %x %u\n", m, m, m, m); 
//输出:10 12 a 10
double b = 3.1415;
printf("%f %e %g\n", b, b,b);
//输出:3.141500 3.141500e+00 3.1415
char s[] = "abcd";
char c = '*';
printf("%s %c\n", s, c);
//输出:abcd *

除此以外,printf 函数还具有一些附加格式字符,具体如下表:

;