【时时三省】(C语言基础)输入输出的概念
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
有关数据输入输出的概念
从前面的程序中可以看到:几乎每一个C程序都包含输入输出。因为要进行运算,就必须给出数据,而运算的结果当然需要输出,以便人们应用,没有输出的程序是没有意义的。输入输出是程序中最基本的操作之一。在讨论程序的输入输出时首先要注意以下几点。
( 1 )所谓输入输出是以计算机主机为主体而言的。
从计算机向输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、光盘、扫描输出显示器仪等)向计算机输入数据称为输入。
( 2 )C语言本身不提供输入输出语句
输入和输出操作输入是由C标准函数库中的函数来实现的。在C标准函数库中键盘提供了一些输入输出函数,例如printf函数和scanf函数。读者在使用它们时,千万不要误认为它们是C语言提供的“输入输出语句”。printf和scanf不是C语言的关键字,而只是库函数的名字。实际上可以不用printf和scanf这两个名字,而另外编写一个输入承数和一个输出函数,用来实现输入输出的功能,采用其他名字作为函数名。
C提供的标准函数以库的形式在C的编译系统中提供,它们不是C语言文本中的组虚部分。不把输入输出作为C语句的目的是使C语言编译系统简单精练,因为将语句翻译成二进制的指令是在编译阶段完成的,没有输入输出语句就可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好,在各种型号的计算机和不同的编译环境下都能适用,便于在各种计算机上实现。
各种C编译系统提供的系统函数库是各软件公司编制的,它包括了C语言建议的全部标准函数,还根据用户的需要补充一些常用的函数,已对它们进行了编译,成为目标文件( .obj文件)。它们在程序连接阶段与由源程序经编译而得到的目标文件( .obj文件)相连接,生成一个可执行的目标程序( .exe文件)。如果在源程序中有printf函数,在编译时并不把它翻译成目标指令,而是在连接阶段与系统函数库相连接后,在执行阶段中调用函数库中的printf函数。
不同的编译系统所提供的函数库中,函数的数量、名字和功能是不完全相同的。不过,有些通用的函数(如printf和scanf等),各种编译系统都提供,成为各种系统的标准函数。
C语言函数库中有一批标准输入输出函数,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有putchar(输出字符)、getchar(输入字符)、printf(格式编出)、scanf(格式输入)、puts(输出字符串)和gets(输入字符串)。
( 3 )要在程序文件的开头用预处理指令# include把有关头文件放在本程序中。
如:
# include < stdio , h >
如果程序调用标准输入输出函数,就必须在本程序的开头用# include指令把stdia . b头文件包含到程序中。# include指令放在程序的开头,所以把stdio.h称为“头文件( header file ),文件后缀为“,h”。在stdio.h头文件中存放了调用标准输入输出函数时所要的信息,包括与标准1 /O库有关的变量定义和宏定义以及对函数的声明,在对程序进行编译预处理时,系统会把在该头文件中存放的内容调出来,取代本行的# include指令。这些内容就成为了程序中的一部分。调用不同的库函数,应当把不同的头文件包含进来,
说明:# include指令还有一种形式,头文件不是用尖括号括起来而是用双撇号,如:
# include " stdio.h”
这两种# include指令形式的区别是:用尖括号形式(如< stdio.h >)时,编译系统从存放C编译系统的子目录中去找所要包含的文件(如stdio.h),这称为标准方式。如果用双撇号形式(如”stdio.h”),在编译时,编译系统先在用户的当前目录(一般是用户存放源程序文件的子目录)中寻找要包含的文件,若找不到,再按标准方式查找。如果用# include指令是为了使用系统库函数,因而要包含系统提供的相应头文件,这时以用标准方式为宜,以提高效率。如果用户想包含的头文件不是系统提供的相应头文件,而是用户自己编写的文件(这种文件一般都存放在用户当前目录中),这时应当用双撇号形式,否则会找不到所需的文件。如果该头文件不在当前目录中,可以在双撇号中写出文件路径(如# include " C:\temp \ filel .h " ),以便系统能从中找到所需的文件