对于一个运行的程序,不可避免地要进行某些输入输出操作,也即I/O操作.对于I/O操 作,C语言提供了一系列标准I/O函数,来完成输入输出任务.
最主要的标准I/O函数包括:fopen()(打开一个文件),fprintf()(写文件),fscanf()(读文 件).读写一个文件的步骤为:
打开文件,同时得到指向文件的指针,然后以该指针为参数, 调用相应的读,写函数进行文 件读写.例如:若想从键盘获取输入(也即读文件,Unix系统下程序可将键盘和屏幕当作普通文件对待),需首先使用fopen()打开键盘这个文件,获 得指向它的指针,然后以该指针为参数调用fscanf()读取该文件内容,从而获得键盘输入;若 想输出信息到显示器(也即写文件),需首先打开显示器这个文件,获得指向它的指针,然后 以该指针为参数调用fprintf()向该文件写入信息, 从而向显示器输出信息.以上步骤在 Unix系统中,可通过以下代码实现:
-
/*
-
在Unix系统下,读取键盘输入,向屏幕输入信息.
-
手动打开键盘和显示器文件并进行读写.
-
*/
-
-
#include <stdio.h>
-
-
int
main(
void
)
-
{
-
FILE
*pf;
-
pf=fopen(
“/dev/tty”
,
“a+”
);
//终端字符文件
-
char
sbuf[100];
-
-
fprintf(pf,
“Please input a string: ”
);
-
fscanf(pf,
“%s”
,sbuf);
-
fprintf(pf,
“The input string is : \”%s\”.\n”
,sbuf);
-
-
return
0;
-
}
注:/dev/tty为终端字符文件,该文件是对键盘,显示器的抽象,向该文件写入,则写入内 容将被显示在显示器,读该文件,则将从键盘获得输入.
采用以上方式获取键盘输入,向屏幕输出将是系统相关的(因为不同系统对键盘,屏幕的 抽象方式不同).为了封装键盘,屏幕I/O操作的底层实现细节,C语言要求系统为每个程序 提供两个指针,这两个指针分别指向键盘和屏幕,并将这两个指针命名为:stdin和 stdout.这两个指针就是所谓的标准输入和标准输出.此时,从键盘获取输入,向屏幕输出 信息的代码可写为:
-
/*
-
在任意系统下,读取键盘输入,向屏幕输入信息.
-
显式得使用标准输入,标准输出指针.
-
*/
-
-
-
#include <stdio.h>
-
int
main(
void
)
-
{
-
char
sbuf[100];
-
fprintf(stdout,
“Please input a string: ”
);
-
fscanf(stdin,
“%s”
,sbuf);
-
fprintf(stdout,
“The input string is : \”%s\”.\n”
,sbuf);
-
return
0;
-
}
-
与代码1不同,该代码将能够运行于任何支持标准C的系统.由于从标准输入获取输入,向标 准输出显示信息是非常常用的操作(几乎每个控制台程序均包含该操作),因此C语言提供 了专门用于从标准输入获取信息和向标准输出显示信息的函数,即scanf()和printf().此 时,从键盘获取输入,向屏幕显示信息的代码可写为:
-
/*
-
标准的C程序,读取键盘输入,向屏幕输入信息.
-
隐式得使用标准输入,标准输出指针.
-
*/
-
-
#include <stdio.h>
-
int
main(
void
)
-
{
-
char
sbuf[100];
-
printf(
“Please input a string: ”
);
-
scanf(
“%s”
,sbuf);
-
printf(
“The input string is : \”%s\”.\n”
,sbuf);
-
return
0;
-
}
-
从中可看出,使用scanf()和printf()时,无需向其提供文件指针,这是因为它们知道所需 的文件指针,它们操作的对象便是标准输入和标准输出所指向的文件.
结论:
标准输入,标准输出是操作系统为C程序提供的文件指针,默认情况下,它们分别指向键盘 和屏幕.标准输入函数scanf()将从标准输入指向的文件读取信息,标准输出函数 printf()将输出信息到标准输出指向的文件.
注:标准输入,标准输出并非必须指向键盘或屏幕,用户程序可改变它们的指向.