C语言程序设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 数据输出

C语言不提供输入/输出语句,数据的输入/输出是通过函数调用语句来实现的。在C语言标准函数库中提供了一些输入/输出函数,它是以标准的输入/输出设备(键盘、显示器等)为输入/输出对象的。输入函数有scanf函数和getchar函数,scanf称为格式输入函数。常用的输出函数有printf和putchar,printf称为格式输出函数。

这些函数的原型(函数名、返回值类型、形式参数)在文件stdio.h中定义,因此,使用输入/输出函数时,必须在源程序的开头使用如下语句:

或:

3.2.1 格式输出函数printf

它一次可以输出多个数据,并且可以是各种类型,还可以根据需要按指定的格式输出。printf函数的形式为:

执行printf函数时,按照格式字符串所指定的格式,把参数进行映射,显示在终端屏幕上。例如:

双引号内的x=%f,y=%d\n即是格式控制符,x,y是要输出的数据。格式控制符是一个用双引号括起来的字符串,它可以包括以下三部分。

1.格式字符串

格式字符串由“%”和后跟的格式字符组成,必须用英文半角的双引号括起来。

C语言提供的格式字符串如表3-1所示。

表3-1 C语言的格式字符串一览表

格式字符串中的“%”是必不可少的,它也是格式说明的标志。

格式说明中,在“%”和上面这些格式字符之间还可以插入几种附加格式说明符,如表3-2所示。

表3-2 C语言的附加格式说明符

2.普通字符

格式控制符之内还可以有一些普通字符,这些普通字符按原样输出。上例中的“x=”和“y=”就是普通字符,当x=21.345678,y=32时,上例的输出结果为:x=21.345678,y=32。

普通字符的作用主要是对后面输出的数据作些说明或解释,以便看起来容易理解些,这些普通字符可以有,也可以没有。例如上例也可写成:

它的输出结果为:21.345678,32

注意,这里的逗号,即隔开%f和%d之间的逗号也属于普通字符,它也会照原样输出。

最普通的printf函数一般输出形式为:

它的输出结果为:21.345678 32

这样的输出结果有时候感到不容易理解,所以最好能用普通字符对输出结果作些解释。

3.输出变量

输出变量也称为输出参数,是输出函数的最后一部分,也是最关键的一部分。它是实际要输出的对象。格式输出函数实际就是把这些变量的内容按照指定格式进行输出,可以说格式控制符是为这些变量服务的。

一般而言,输出数据可以是变量,也可以是表达式,还可以是函数。对于变量,会输出变量的值。对于表达式或者函数,则在输出前要先求出表达式或函数的值,然后将其值进行输出。也就是说“先计算,后输出”。例如:

输出变量还可以是字符串常量,也可以是字符数组。

注意

在输出格式控制符的后面,一定要用逗号“,”把格式字符串和输出变量之间隔开。这样,格式输出函数就分为两大部分:格式字符串和输出变量,它们之间用逗号隔开。

输出变量可以是多个变量,各个变量之间也用逗号“,”隔开。每一个输出变量应该有对应的一个格式字符串,它们之间是一一对应的关系。不能多个输出变量对应一个格式控制符,例如:

这样的语句只会输出变量x的值,y和z的值则得不到输出。

也可用printf直接输出字符串常量。例如:

输出结果为:Happy New Year!

这里直接用双引号把要输出的字符串括起来,不要“%”开头的格式控制符,后面也要不其他输出参数。输出时可以用一句话概括“引号脱去,原样显示”。

用这种方法只能输出字符串常量,如果输出存放在字符数组里的字符串则仍需要用格式控制符“%s”。

下面关于具体的格式字符我们再作说明。

1.d格式符

它用于十进制整数的输出,有几种不同的用法。

(1)%d按整数的实际长度输出。

(2)%md,m是一个正整数,它指定了输出字段的宽度,如实际数据的位数小于m,则左端填补空格。如大于m,则按实际的位数输出。例如,设x=978,y=8765324时:

输出结果为x=978,y=8765324

(3)%ld,用于输出长型long整数,对已被定义为长型的变量,必须用“%ld”输出,否则会出错。

2.o格式字符

主要用于输出八进制整数,由于它把符号位当作八进制数的一部分,所以不能输出负数,否则会出错。

3.x格式字符

用于输出十六进制整数,由于它把符号位当作十六进制数的一部分,所以也不能输出负数,否则会出错。

4.u格式字符

用于输出十进制无符号整数。

5.c格式字符

用于输出一个字符。

6.s格式字符

用于输出一个字符串,有下面几种不同形式。

(1)%s。

例如:

输出结果为:

printf函数中的输出变量可以是字符串常量,也可以是字符数组。

(2)%ms。

指定输出的字符串占m列,m是一个正整数。如果字符串的长度大于m,则不会被截断,仍按原有的长度全部输出;如果字符串的长度小于m,则在左边填补空格。

(3)%m.ns。

指定输出的字符串占m列,取字符串中左边的n个字符,输出时向右对齐。m和n为正整数。如果字符串的长度大于m,则不会被截断,仍按原有的长度全部输出;如果字符串的长度小于m,则在左边填补空格。

(4)%-ms。

从左边开始输出,即靠左对齐,指定输出的字符串占m列。m为正整数。如果字符串的长度大于m,则不会被截断,仍按原有的长度全部输出;如果字符串的长度小于m,则在右边填补空格。

7.f格式字符

用于输出一个实数,有下面几种不同形式。

(1)%f。

输出6位小数,整数位有多少位就输出多少位。由于float型的有效数字只有7位,因此可能会输出一些无效的数据。例如:

输出结果为:

x的整数部分共有9位,但只有前面7位是正确的,后面的2位以及所有的小数部分都不对,y的小数部分也有不正确的数字。

假如我们把上面的程序修改为:

则输出结果会为:

由于double型数据的有效数字为15~16位,所以上面的数据输出结果才会正确。所以对于实型数据一定要考虑它的有效数字是多少位。

(2)%m.nf。

输出m位数据,其中n位为小数,一般要求m>n,如果数据长度位小于m,则左边填补空格。

(3)-m.nf。

从左边开始输出,共输出m位数据,其中n位为小数,一般要求m>n,如果数据长度位小于m,则右边填补空格。

8.e格式字符

以指数的形式输出一个实数,小数点前必须有一位整数,可以是0,而且也只能有1位整数。%e格式符输出的实数共占13位,其中e占1位,指数占3位,指数符号占1位,小数占6位。

%e格式符也可以用%m.ne和%-m.ne来输出。这时,m指定输出的数据共m位,n为小数的位数。当实际的长度大于m时,按实际的长度输出,也可以不指定总长度而只指定小数位的长度,如%.4e,这时小数输出4位,应注意,这里的小数点“.”不能省略。当m大于实际长度时,左边补0。如有负号“-”,即%-m.ne,则输出数据向左对齐,当m大于实际长度时,右边补0。

9.g格式字符

用来将一个实数以最少的位数输出,它将选择f格式符或e格式符中所需位数最少的一种形式输出一个实数。

3.2.2 字符输出函数putchar

函数:putchar

作用:用来向屏幕输出一个字符。注意,只能输出一个单字符。

例如:

putchar('A')把字符'A'输出到屏幕,putchar(ch)把字符变量ch的值输出到屏幕,输出结果为单字符'&'