第四章  数据输入/输出函数
【学习目标】
本章将向读者详细介绍C语言的输入/输出函数相关内容,通过本章学习,掌握整数、实数、字符型数据以及字符串的基本输入/输出方法,熟练掌握scanf()printf()函数的基本格式。本章的学习要点包括如下几点:
1putchar()函数的使用
2getchar()函数的使用。
3scanf()函数的使用。
4printf()入门函数的使用。
5printf()函数中常用的格式。
6scanf()函数的使用。
【学习导航】
本章的在整个课程中的位置如图4-1所示。
4-1  本章学习导航


    把数据从计算机内部送到计算机外部设备上的操作称为“输出”。例如把计算结果显示的屏幕上或打印在纸上。从计算机外部设备将数据送入到计算机内部的操作称为“输入”。
    C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入输出函数来实现,在调用输入输出函数之前,要求在源程序中出现包含头文件stdio.h的命令行。#include <stdio.h>
4.1数据输出
4.1.1 putchar()字符输出函数
putchar()函数将指定的表达式的值所对应的字符输出到标准输出终端上。表达式可以是字符型或整型,它每次只能输出一个字符。putchar ()函数的调用形式如下:
格式: putchar( c )
参数: c为字符常量、变量或表达式
【课堂案例4-1使用putchar()putchar函数函数输出字符php+ajax多图片上传并显示路径
【案例目标】学会putchar()函数的使用
【案例知识要点】putchar()函数
【案例程序代码】putchar1.c
1 #include <stdio.h>
就业培训班
2 main()
3 {
4     int c = 65;
5     char a = 'B';
6     putchar(c);
matlab数字图像处理工具箱
7     putchar('\n');
8     putchar(a);
9     putchar('\n');
10 }
输出结果如图4-2所示:
图4-2 putchar1.c程序输出结果
试一试(一)
    使用putchar()函数输出“Hello World!”。
4.1.2 printf()函数的一般形式
printf()函数是C语言提供的标准输出函数,用来在终端设备上按指定格式输出。printf()函数的调用形式如下:
printf(格式控制字符串,输出项1,输出项2,输出项3,…)
输出项可以是常量、变量、表达式,其类型与个数必须与控制字符串中格式字符的类型、个数一致、当有多个输出项时,各项之间用逗号分隔。
格式控制字符串必须用双引号括起,由格式说明和普通字符两部分组成。
程序print1.c展示了输出整数:
11 #include <stdio.h>
12 main()
13 {
14     int i = 100;
15     printf("i=%d",i);
16 }
输出结果为:
i=100
【程序说明】
第5行使用printf()函数格式化输出。"i=%d"为格式化字符串,其中i=为普通字符,%d为输出
格式(输出整数)。
4.1.1 printf()函数中常用的格式说明
    格式控制字符串中,每个格式说明都必须用“%”开头,以一个格式字符作为结束,在此之间可以根据需要插入“宽度说明”、左对齐符号“-”、前导零符号“0"等。
1. 格式控制字符
%后允许使用的格式字符和它们的功能如表4-1所示。在某些系统中,可能不允许使用大写字母的格式字符,因此为了使程序具有通用性,在写程序时应尽量不用大写字母的格式字符。
4-1 格式字符及其功能
格式字符
功能说明
c
输出一个字符
di
输出带符号的十进制整数。%ld为长整型,%hd为短整型,%l64d64为长整型。
0
以八进制格式输出的整数,%0不带先导0,例如十进制数15%0输出为17;以%#0加先导0,例如例如十进制数15%#0输出为017
Xx
以十六进制格式输出整型数。%x%X不带先导0x0X,例如十进制数2622%x数据格式输出为a3e,用%X数据格式输出为A3E;用%#x%#X输出带先导0x0X的十六进制数,例如十进制数2622%#x数据格式输出为0xa3e,用%#X数据格式输出为0XA3E
u
以无符号十进制形式输出整数
f
以带小数点的数学形式输出浮点数(单精度和双精度)
Ee
以指数形式输出浮点数(单精度和双精度),格式是:[-]m.dddddde±xxx [-]m.dddddd52我爱自学网E±xxx。小数位数(d的个数)由输出精度决定,隐含精度是6。若指数为0,则包括小数点在内的小数部分都不输出。Xxx为指数,保持3位,不足补0。若指数为0,输出指数为000
Gg
由系统决定采用%f格式还是采用%e(%E)格式输出,以使输出宽度最小。
s
输出一个字符串,直到遇到\0。若字符串的长度超过规定的精度,则自动突破,不会截断字符串。
P
输出变量的内存地址
%
也就是%%形式,输出一个%
【课堂案例4-2】printf()函数的使用。
【案例学习目标】学会正确地使用格式控制字符串。
【案例知识要点】printf()函数和格式控制字符串。
【程序代码】testPrint1.c
1 #include <stdio.h>
2 int main(void)
3 {
4     int a=567;
5     int b=65;
6     float c=567.789f;
7     printf ("%d\n",a);
8     printf("%x\n",a);
9     printf("%o\n",b);
10     printf("%u\n",a);
11     printf("%c\n",b);
12     printf("%s\n","ABC");
13     printf("%e\n",c);
14     printf("%f\n",c);
15     printf("%g\n",c);
16     printf("%%\n");
17 }
输出结果如图4-3所示:
图4-3 testPrint1.c程序输出结果
2. 长度修饰符
在%和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。对于长整型数(long)应该加l,即%ld;对于短整型数(short)可以加h,即%hd。
3. 输出数据所占的宽度
当使用%d,%c,%f,%e,%s,…的格式说明时,输出数据所占的宽度(域宽)由系统决定,通常按照数据本身的实际宽度输出,前后不加空格,并采用右对齐的形式。也可以用以下三种
方法人为控制输出数据所占的宽度(域宽),按照使用者的意愿进行输出。
  (1)在%和格式字符之间插入一个整数常数来指定输出的宽度n(例如%4d,n代表整数4)。如果指定的宽度n不够,输出时将会自动突破,保证数据完整输出。如果指定的宽度n超过输出数据的实际宽度,输出时将会右对齐,左边补以空格,达到指定的宽度。
  (2)对于float和double类型的实数,可以用“n1.n2”的形式来指定输出宽度(n1和n2分别代表一个整常数),其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,n2也称为精度(例如%12.4f,n1代表整数12 ,n2代表整数4)。
  对于f,e或E,当输出数据的小数位多于n2位时,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理;当输出数据的小数位少于n2时,在小数的最右边补0,使得输出数据的小数部分宽度为n2。若给出的总宽度n1小于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则自动突破n1的限制;反之,数字右对齐,左边补空格。
  也可以用“.n2”格式(例如%.6f),不指定总宽度,仅指定小数部分的输出位数,由系统自动突破,按照实际宽度输出。如果指定“n1.0”或“.0”格式(例如%12.0f或%.0f),则不输出小数点和小数部分。
对于g或G,宽度用来指定输出的有效数字位数。若宽度超过数字的有效数字位数,则左边
自动补0;若宽度不足,则自动突破。不指定宽度,将自动按照b位有效数字输出,截去右边多余的小数,并对截去部分的第一位小数做四舍五入处理。
(3)对于整型数,若输出格式是“0n1”或“.n2”格式(例如%05d或%.5d},则如果指定的宽度超过输出数据的实际宽度,输出时将会右对齐,左边补0。
对于float和double类型的实数,若用“0n1”或“n2”格式输出(例如%012.4f),如果给出的总宽度n1大于n2加上整数位数和小数点(e或E格式还要加上指数的5位),则数字右对齐,左边补0。
对于字符串,格式“n1”指定字符串的输出宽度,若n1小于字符串的实际长度,则自动突破,输出整个字符串;若n1大于字符串的实际长度,则右对齐,左边补空格。若用“.n2”格式指定字符串的输出宽度,则若n2小于字符串的实际长度,将只输出字符串的前n2个字符。
注意:输出数据的实际精度并不完全取决于格式控制中的域宽和小数的域宽,而是取决于数据在计算机内的存储精度。通常系统只能保证float类型有7位有效数字,double类型有15位
有效数字。若你指定的域宽和小数的域宽超过相应类型数据的有效数字,输出的多余数字是没有意义的,只是系统用来填充域宽而已。
【课堂案例4-3】printf()函数的使用。
【案例学习目标】学会正确地使用格式控制字符串。
【案例知识要点】数据所占的宽度。
【程序代码】testPrint2.c
1 #include <stdio.h>
2 main()
3 {
4     int a=1234;
5     float f=123.456f;
6     char ch='a';
7     printf("%8d,%2d\n",a,a);
8     printf("%f,%8f,%8.1f,%.2f,%.2e\n",f,f,f,f,f);
9     printf("%3c\n",ch);
10 }
输出结果如图4-4所示:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。