C语言输入和输出【转】
C语言本身不提供输入和输出语句,输入和输出操作是由C标准函数库中的函数来实现的。
C提供的标准函数是以库的形式在C的编译系统中提供,它们不是C语言文本中的组成部分。不把输入输出作为C语句的目的是使C语言编译系统简单精练,因为将语句翻译成二进制的指令是在编译阶段完成的,没有输入输出语句就可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好,在各种型号的计算机和编译环境下都能适用,便于在各种计算机上实现。
各种C编译系统提供的系统函数库是各软件公司编制的,它包括了C语言建议的全部标准函数。还根据用户的需要补充一些常见的函数,已对他们进行了编译,成为目标文件(.obj文件)。他们在程序连接阶段与由源程序经过编译而得到的目标文件相连接,生成一个可执行的目标文件。如果在源程序中有printf函数,在编译时并不把它编译成目标指令,而是在连接阶段与系统函数库相连接后,在执行阶段调用函数库的printf函数。
使用标准输入输出函数时,要用到"stdio.h"头文件中提供的信息。stdio是standard input & output(标准输入和输出)的缩写。文件后缀的"h"是header的缩写。
用printf函数输出数据
1.printf 函数的一般格式
printf 函数的一般格式为:
printf(格式控制,输出表列);
例如:
printf("%d %c", n, m);
"格式控制" 使用双撇号括起来的一个字符串,包括两个信息:格式声明,由“%”和格式字符组成,如%d,%f等,它的作用是将输出的数据转换为指定的格式然后输出。普通字符,普通字符即需要在输出时原样输出的字符。
2.格式字符
表1.1 printf函数中用到的格式字符
|
格式字符 |
说明 |
|
d,i |
以带符号的十进制形式输出整数(正数不输出符号) |
|
o |
以八进制无符号形式输出整数(不输出前导符0) |
|
x,X |
以十六进制无符号形式输出整数(不输出前导符0x),用x输出小写a~f,用X输出大写。 |
|
u |
以无符号十进制形式输出整数 |
|
c |
以字符形式输出,只输出一个字符 |
|
s |
输出字符串 |
|
f |
以小数形式输出单、双精度数,隐含输出6位小数 |
|
e,E |
以指数形式输出小数 |
|
g,G |
选择%f,%e中输出宽度较短的一种格式,不输出无意义的0. |
在格式声明中,在%和上述格式字符之间可以插入表2.2列出的几种附加符号(又称修饰符)。
表1.2 printf 函数中用到的格式附加字符
|
字符 |
说明 |
|
l |
用于长整型整数,可以加在格式符d、o、x、u前面 |
|
m (代表一个正整数) |
数据最小宽度 |
|
n (代表一个正整数) |
对实数,表示输出n位小数;对字符串,表示截取的字符个数 |
|
- |
域内左靠 |
注意:
(1)printf 函数输出时,务必注意输出对象的类型应与上述格式说明匹配,否则会出现错误。
(2)除了X,E,G外,其他格式字符必须使用小写字母。
(3)连续两个“%”表示输出“%”。
(4)输出双精度变量用%m.nf的方式,例如 "%20.15f"。
(5)在用 %f 输出时要注意数据本身能提供的有效数字,如 float 型数据的存储单元只能保证6位有效数字,double 类型数据只能保证15位有效数字。不要以为计算机输出的所有数字都是绝对精确有效的。
用 scanf 函数输入数据
1.scanf 函数的一般格式
scanf 函数的一般格式为:
scanf(格式控制,地址表列);
例如:
scanf("a=%d, b=%c, c=%f", &a, &b, &c);
"地址表列",是由若干个地址组成的表列,可以是变量的地址,也可以是字符串的首地址。
2.scanf 的格式声明
表2.1 scanf 函数中用到的格式字符
|
格式字符 |
说明 |
|
d,i |
用来输入有符号的十进制整数 |
|
u |
用来输入无符号的十进制整数 |
|
o |
用来输入无符号的八进制整数 |
|
x,X |
用来输入无符号的十六进制整数(大小写作用相同) |
|
c |
用来输入单个字符 |
|
s |
用来输入字符串,将字符串送入一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志"\0"作为最后一个字符 |
|
f |
用来输入实数,可以用小数形式或者指数形式输入 |
|
e,E,g,G |
与 f 作用相同,e 与 f,g 可以互相替换(大小写作用相同) |
表2.2 scanf 函数中用到的格式附加字符
|
字符 |
说明 |
|
l |
用于输入长整型数据(可用%ld、%lo、%lx、%lu)以及 double 型数据(用%lf 或 %le) |
|
h |
用于输入短整型数据(可用 %hd、%ho、%hx) |
|
域宽 |
指定输入数据所占宽度(列数),域宽应为正整数 |
|
* |
表示本输入项在读入后不赋给相应的变量 |
注意:
(1)scanf 函数中“格式控制”后边应该是变量地址,而不是变量名。
(2)如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符。
(3)在用"%c"格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入。
(4)输入数值时,在两个数值之间需要插入空格(或其他分隔符),以使系统能区分两个数值。在连续输入数值时,在两个字符之间不要插入空格或者其他分隔符(除非在scanf 函数中的格式字符串中有普通字符,这时在输入数据时要在原位置插入这些字符),系统能区分两个字符。
(5)在输入数值数据时,如输入空格、回车、Tab键或遇非法字符(不属于数值的字符),认为该数据输入结束。
字符数据的输入输出
除了用 scanf 函数和 printf 函数 输入和输出字符外,C 函数库还提供了一些专门用于输入和输出字符的函数。它们是很容易理解和使用的。
1.用 putchar 函数输出一个字符
想从计算机向显示器输出一个字符,可以调用系统函数库中的 putchar 函数(字符输出函数)。
putchar 函数的一般形式为:
putchar(c);
putchar 是 put character 的缩写。putchar(c) 的作用是输出字符变量 c 的值。
2.用 getchar 函数输入一个字符
为了向计算机输入一个字符,可以调用系统函数库中的 getchar 函数。
getchar 函数的一般形式为:
getchar();
getchar 是 get character 的缩写。getchar 函数没有参数,它的作用是从计算机终端(一般是键盘)输入一个字符。getchar 的值就是从输入设备输入的字符。getchar 函数只能获取一个字符。
说明:在用键盘输入信息时,并不是在键盘上敲一个字符,就马上将字符送到计算机中去的。这些字符先暂存在键盘的缓冲器中,只有按了 Enter 键才把这些字符一起送到计算机中,然后按先后顺序分别赋值给相应的变量。
注意:在执行 getchar 函数不仅可以从输入设备获得一个可显示的字符,而且可以获得在屏幕上无法显示的字符,如控制字符。

浙公网安备 33010602011771号