输入与输出

在c语言中,所有的数据输入/输出操作都是通过对标准库函数的调用来完成的。

本节主要介绍常用的printf、scanf、putchar和getchar函数。

printf函数

标准格式输出函数

语法格式

printf("格式控制字符串",输出项列表)

输出项列表为要输出的数据变量。

格式控制字符串包含三部分:

  1. 格式说明 - 由%后跟格式字符格式修饰符组成,用来说明输出数据的类型、形式、长度、精度等。其一般形式为:%[标志] [宽度] [.精度] [[h|l] <格式字符>]
  2. 转义字符 - 用于在程序中描述键盘上没有的字符或某个具有复合功能的控制字符。
  3. 普通字符 - 程序运行时原样输出的字符。

格式说明

格式字符

格式字符

说明

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,以使输出结果的总宽度最小,并且不输出没有意义的0。

s

依次输出字符串中的各个字符,直到'\0'结束。

格式修饰符

格式修饰符

说明

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] <格式字符>

格式说明

格式字符

格式字符

说明

c

输入一个字符。

d

输入一个十进制整数。

i

输入一个整数,可以是十进制,也可以是带前导的八进制或十六进制。

o

以八进制形式输入一个整数(前导可带可不带)。

x

以十六进制形式输入一个整数(前导可带可不带)。

u

输入一个无符号型的十进制整数。

f

以小数形式或指数形式输入一个实数。

e

以小数形式或指数形式输入一个实数,与f作用相同。

s

输入一个字符串,字符串之间不允许出现空格(因为空格字符在scanf函数中是各数据项之间的间隔符)。

格式修饰符

格式修饰符

说明

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函数不会。