C语言格式化输入输出

本文主要介绍一下C语言中printf和scanf两个函数。

printf函数

printf函数被设计用来显示格式串(format string)的内容,并且在该串中的指定位置插入可能的值。调用printf函数时必须提供格式串,格式串后面的参数是需要在显示时插入到该串中的值:

1
printf(格式串, 表达式1, 表达式2, ...);

显示的值可以是常量、变量或者更加复杂的表达式。调用printf函数一次可以打印的值的个数没有限制。

转换说明

转换说明可以用%m.pX格式或%-m.pX格式,这里的m和p都是整数常量,而X是字母。m和p都是可选的。如果省略p,m和p之间的小数点也要去掉。在转换说明%10.2f中,m是10,p是2,而X是f。在转换说明%10f中,m是10,p(连同小数点一起)省去了;而在转换说明%.2f中,p是2,m省去了。

如果要显示的数值所需的字符数少于m,那么值在字段内是右对齐的。(换句话说,在值前面放置额外的空格。)

例:转换说明%4d将以•123的形式显示数123(本章用符号•表示空格字符)。

如果要显示的值所需的字符数多于m,那么字段宽度会自动扩展为所需的尺寸。

例:转换说明%4d将以12345的形式显示数12345,而不会丢失数字。

在m前放上一个负号会导致左对齐;转换说明%-4d将以123•的形式显示123。

精度(precision)p的含义很难描述,因为它依赖于转换说明符(conversionspecifier)X的选择。X表明在显示数值前需要对其进行哪种转换。对数值来说最常用的转换说明符有以下几个。

  • d ——表示十进制(基数为10)形式的整数。p指明了待显示的数字的最少个数(必要时在数前加上额外的零);如果省略p,则默认它的值为1。
  • e ——表示指数(科学记数法)形式的浮点数。p指明了小数点后应该出现的数字的个数(默认值为6)。如果p为0,则不显示小数点。
  • f ——表示“定点十进制”形式的浮点数,没有指数。p的含义与在说明符e中的一样。
  • g ——表示指数形式或者定点十进制形式的浮点数,形式的选择根据数的大小决定。p说明可以显示的有效数字(没有小数点后的数字)的最大数量。与转换说明符f不同,g的转换将不显示尾随的零。此外,如果要显示的数值没有小数点后的数字,g就不会显示小数点。编写程序时无法预知数的大小或者数值变化范围很大的情况下,说明符g对于数的显示是特别有用的。在用于显示大小适中的数时,说明符g采用定点十进制形式。但是,在显示非常大或非常小的数时,说明符g会转换成指数形式以便减少所需的字符数。

转义序列

格式串中常用的代码\n被称为转义序列(escape sequence)。转义序列使字符串包含一些特殊字符而不会使编译器引发问题,这些字符包括非打印的(控制)字符和对编译器有特殊含义的字符(如”)。

常用的转义序列:

  • 警报(响铃)符:\a
  • 回退符:\b
  • 换行符:\n
  • 水平制表符:\t
  • 字符\“: \"

不能在字符串中只放置单独一个字符\,编译器将认为它是一个转义序列的开始。为了显示单独一个字符\,需要在字符串中放置两个\字符:

1
printf("\\");

scanf函数

scanf函数根据特定的格式读取输入。scanf函数转换说明的用法和printf函数转换说明的用法本质上是一样的。

在许多情况下,scanf函数的格式串只包含转换说明,如下例所示:

1
2
3
int i, j;
float x, y;
scanf ("%d%d%f%f", &i, &j, &x, &y);

输入:

1
1  -20  .3  -4.0e3

scanf函数将读入上述行的信息,并且把这些符号转换成它们表示的数,然后分别把1、-20、0.3和-4000.0赋值给变量i、j、x和y。

微信公众号 长夜西风

个人网站 http://www.cmder.info/

书痴者文必工,艺痴者技必良。