预计阅读本页时间:-
printf()和scanf()函数使您能够与程序通信。它们被称为输入/输出函数,或者被简称为I/O函数。它们不是只有您可以使用的CI/O函数,而且是最通用的I/O函数。在历史上,这些函数就像C函数库中的所有其他函数一样,不是C的定义的一部分。最初的时候C把输入/输出的实现留给了编译器的编写者,这样可以更好地使I/O与特定的机器相匹配。为了兼容性起见,不同的实现中都带有各自的scanf()和printf(),但它们之间偶尔有一些差异。C90和C99标准描述了这些函数的标准版本,我们将遵循这个标准。
虽然printf()是输出函数,scanf()是输入函数,但是它们的工作几乎相同,都使用了控制字符串和参数列表。我们将依次给出printf()和scanf()函数的工作原理。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
4.4.1 printf()函数
请求printf()打印变量的指令取决于变量的类型。例如,在打印整数时使用%d符号,而在打印字符时使用%c符号。这些符号被称为转换说明(conversion specification),因为它们指定了如何把数据转换成可显示的形式。我们将会列出ANSIC标准为printf()提供的各种转换说明,然后将示范如何使用一些较为常用的转换说明。表4.3给出了转换说明符和用这些转换说明符打印的输出类型。
表4.3 转换说明符及作为结果的打印输出
转换说明 | 输出 |
---|---|
%a | 浮点数、十六进制数字和p-记数法(C99) |
%A | 浮点数、十六进制数字和P-记数法(C99) |
%c | 一个字符 |
%d | 有符号十进制整数 |
%e | 浮点数、e-记数法 |
%E | 浮点数、E-记数法 |
%f | 浮点数、十进制记数法 |
%g | 根据数值不同自动选择%f或%e。%e格式在指数小于-4或者大于等于精度时使用 |
%G | 根据数值不同自动选择%f或%E。%E格式在指数小于-4或者大于等于精度时使用 |
%i | 有符号十进制整数(与%d相同) |
%o | 无符号八进制整数 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%x | 使用十六进制数字0f的无符号十六进制整数 |
%X | 使用十六进制数字0F的无符号十六进制整数 |
%% | 打印一个百分号 |
4.4.2 使用printf()
程序清单4.6中包含的程序使用了一些转换说明。
程序清单4.6 printout.c程序
显然,输出就是:
The 5 CEOs drank 13.500000 cups of expresso.
The value of pi is 3.141593.
Farewell! thou art too dear for my possessing,
$6200
以下是printf()的使用格式:
printf (Control-string, iteml, item2, …);
iteml, item2等等都是要打印的项目。它们可以是变量,也可以是常量,甚至可以是在打印之前进行计算的表达式。控制字符串(control-string)是一个描述项目如何打印的字符串。正如第3章“数据和C”中所提及的,控制字符串应该为每个要打印的项目包含一个转换说明符。例如,考虑如下语句:
printf (“The %d CEOs drank %f cups of expresso.\n”, number, expresso);
控制字符串就是双引号内的语句。它包含了分别对应于number和expresso(要显示的两个项目)的两个转换说明符。图4.6给出了printf()语句的另一个示例。
下面是示例程序中的另外一行:
printf (“The value of pi is %f.\n”, PI);
这一次,项目列表中只有一个成员,即符号常量PI。
正如图4.7所示,控制字符串包含了两种形式截然不同的信息:
● 实际要打印的字符。
● 转换说明。
图4.6 printf()的参数
图4.7 一个控制字符串的结构