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 函数不仅可以从输入设备获得一个可显示的字符,而且可以获得在屏幕上无法显示的字符,如控制字符。

 

 

 

 

 

 

posted @ 2013-06-06 18:46  龙格泽月  阅读(2851)  评论(0)    收藏  举报