5.数据的输⼊与输出
输⼊与输出
在c语⾔中,所有的数据输⼊/输出操作都是通过对标准库函数的调⽤来完成的。
本节主要介绍常⽤的printf、scanf、putchar和getchar函数。
printf函数
标准格式输出函数
语法格式
printf("格式控制字符串",输出项列表)
输出项列表为要输出的数据变量。
格式控制字符串包含三部分:
1. 格式说明 - 由%后跟格式字符及格式修饰符组成,⽤来说明输出数据的类型、形式、长度、精度等。其⼀般形式为:
%[标志] [宽度] [.精度] [[h|l] <;格式字符>]
2. 转义字符 - ⽤于在程序中描述键盘上没有的字符或某个具有复合功能的控制字符。
3. 普通字符 - 程序运⾏时原样输出的字符。
格式说明
1. 格式字符
格式字符说明
c输出⼀个字符。
d或i 以⼗进制形式输出⼀个带符号的整数(整数不输出符号)。
u 以⼗进制形式输出⽆符号整数。若⽤它来输出有符号整数,则系统⾃动将符号位转化为数值位。%o和%x也有类似的功能。
o以⼋进制形式输出⽆符
号整数(不带前导0)。
x或X 以⼗六进制形式输出⽆符号整数(不带前导0x)。%x输出⼩写字母,%X为⼤写。
f 以⼩数形式输出float或double型实数。整数部分如实输出,默认输出6位⼩数。
e或E 以指数形式输出float或double型实数,默认输出6位⼩数。指数标志字符为e或E。
g或G 由系统决定采⽤%f还是%e,以使输出结果的
g或G是%e,以使输出结果的
总宽度最⼩,并且不输
出没有意义的0。
s依次输出字符串中的各
个字符,直到'\0'结束。
格式字符说明
2. 格式修饰符
格式修饰符说明
l输出长整型数时,加在
d、i、o、x、X、u前。
m(域宽)数据输出的域宽(列
数)。
.n(精度)对于实数,表⽰输出n位
⼩数。
-输出的数据在域内左对
齐,右边补空格。
+输出的数字前带有正负
号。
0输出的数据在域内右对
齐时,左边补0。
#⽤在格式字符o、x、X 前,使输出的数据带上前导(0、0x或0X)。
格式修饰符加在%与格式字符之间。
长整数数据的输出⼀定要⽤%ld来输出。
输出数据时,数据在显⽰器或打印纸上的所占位置的宽度(域宽)通常是由系统⾃动决定的,⼀般取决于数据本⾝
的宽度,并采⽤右对齐的形式输出。
注意事项
格式说明中的各个格式字符与输出项列表中的各个输出项,在类型、次序与个数上应该保持⼀致。
如果类型补匹配,系统并补报错,将导致数据不能正确被输出。
如果输出项列表的个数要多,则多余的数据补输出。
如果输出项列表的个数要少,则其它数据将输出不确定的值或0值。
printf的函数返回值是⼀个整数值,通常是输出字符的个数。
scanf函数
标准格式输⼊函数
语法格式
scanf("格式控制字符串",地址表列)
地址表列是由若⼲个地址组成的列表,可以是变量的地址或字符串的⾸地址。
格式控制字符串的作⽤与printf函数基本相同,其中格式说明的⼀般形式为:
%[*] [输⼊数据宽度] [h|l] <;格式字符>
格式说明
1. 格式字符
格式字符说明
c输⼊⼀个字符。
d输⼊⼀个⼗进制整数。
printf输出格式的作用
i 输⼊⼀个整数,可以是⼗进制,也可以是带前导的⼋进制或⼗六进制。
o 以⼋进制形式输⼊⼀个整数(前导可带可不带)。
x 以⼗六进制形式输⼊⼀个整数(前导可带可不带)。
u输⼊⼀个⽆符号型的⼗
进制整数。
f以⼩数形式或指数形式
输⼊⼀个实数。
e 以⼩数形式或指数形式输⼊⼀个实数,与f作⽤相同。
s 输⼊⼀个字符串,字符串之间不允许出现空格(因为空格字符在scanf 函数中是各数据项之间的间隔符)。
2. 格式修饰符
格式修饰符说明
l ⽤于输⼊长整型数据(%ld、%lu、%lo、%lx 和%lf、%le)。
h 输⼊输⼊短整型数据(%hd、%hu、%ho、%hx)。
n(正整数)制定输⼊数据所占的域
宽(列数)。
*表⽰将对应的输⼊值丢掉,不赋值给任何⼀个变量。⼀般⽤在从⽂件中输⼊数据时跳过已经存在的但是⼜⽆⽤的数据。
注意事项
格式说明中的格式字符与地址表列中的数据,在类型、次序及个数应该保持⼀致。
如果类型不匹配,系统并不给出错误信息,但不可能得到正确数据。
当⽤户输⼊数据少于输⼊项时,程序等待输⼊,直到满⾜要求为⽌。
当⽤户输⼊数据多余输⼊项时,多余的数据并不会消失,⽽是留作为下⼀个输⼊操作时的输⼊数据⽤。为了不影响下⼀个输⼊操作的正确进⾏,可以在下⼀个输⼊函数之前⽤清除函数fflush(stdin)来清除输⼊缓冲区中的残留数据。
输⼊时,输⼊的各项数据要⽤间隔符隔开。间隔符可以时空格符、制表符或回车符,间隔符数量不限。
可以使⽤%*跳过对应的输⼊数据。
输⼊字符型数据时,各数据项之间不能有间隔符,因为此时间隔符也会被当作⼀般字符输⼊到变量中去。因此当程序既需要输⼊数值数据,⼜需要输⼊字符型数据时,最好分别⽤两个输⼊函数来实现。
putchar函数
putchar函数是字符输出函数,只输出单个字符。
语法格式
putchar(char);
其中char可以是⼀个字符变量或常量,也可以是⼀个整型变量或常量。
getchar函数
getchar函数的功能是从键盘上输⼊⼀个字符,函数的返回值是所读取的字符的ASCII码值。
语法格式
getchar();
其通常⽤法是把输⼊的字符赋值给⼀个字符型变量,构成赋值语句。
注意
在getchar函数运⾏时,⽤户在输⼊⼀个字符后,还必须键⼊回车键才能结束getchar函数并返回值。
若要在程序中只输⼊字符(不按回车键)就可得到正确的返回按键的值,可使⽤getch或getche函数。
getche函数将读⼊的字符回显到显⽰器上,getch函数不会。