c语言 输入是以什么为标准,标准输入、标准输出究竟是什么?

本文转自:http://blog.csdn.net/astropeak/article/details/6651747

本文将从基本原理解析标准输入,标准输出的由来(最终结论见最后).

对于一个运行的程序,不可避免地要进行某些输入输出操作,也即I/O操作.对于I/O操 作,C语言提供了一系列标准I/O函数,来完成输入输出任务.

最主要的标准I/O函数包括:fopen()(打开一个文件),fprintf()(写文件),fscanf()(读文 件).读写一个文件的步骤为:

打开文件,同时得到指向文件的指针,然后以该指针为参数, 调用相应的读,写函数进行文 件读写.例如:若想从键盘获取输入(也即读文件,Unix系统下程序可将键盘和屏幕当作普通文件对待),需首先使用fopen()打开键盘这个文件,获 得指向它的指针,然后以该指针为参数调用fscanf()读取该文件内容,从而获得键盘输入;若 想输出信息到显示器(也即写文件),需首先打开显示器这个文件,获得指向它的指针,然后 以该指针为参数调用fprintf()向该文件写入信息, 从而向显示器输出信息.以上步骤在 Unix系统中,可通过以下代码实现:

/*

在Unix系统下,读取键盘输入,向屏幕输入信息.

手动打开键盘和显示器文件并进行读写.

*/

#include 

intmain(void)

{

FILE*pf;

pf=fopen("/dev/tty","a+");//终端字符文件

charsbuf[100];

fprintf(pf, "Please input a string: ");

fscanf(pf,"%s",sbuf);

fprintf(pf,"The input string is : \"%s\".\n",sbuf);

return0;

}

注:/dev/tty为终端字符文件,该文件是对键盘,显示器的抽象,向该文件写入,则写入内 容将被显示在显示器,读该文件,则将从键盘获得输入.

采用以上方式获取键盘输入,向屏幕输出将是系统相关的(因为不同系统对键盘,屏幕的 抽象方式不同).为了封装键盘,屏幕I/O操作的底层实现细节,C语言要求系统为每个程序 提供两个指针,这两个指针分别指向键盘和屏幕,并将这两个指针命名为:stdin和 stdout.这两个指针就是所谓的标准输入和标准输出.此时,从键盘获取输入,向屏幕输出 信息的代码可写为:

/*

在任意系统下,读取键盘输入,向屏幕输入信息.

显式得使用标准输入,标准输出指针.

*/

#include 

intmain(void)

{

charsbuf[100];

fprintf(stdout, "Please input a string: ");

fscanf(stdin,"%s",sbuf);

fprintf(stdout,"The input string is : \"%s\".\n",sbuf);

return0;

}

与代码1不同,该代码将能够运行于任何支持标准C的系统.由于从标准输入获取输入,向标 准输出显示信息是非常常用的操作(几乎每个控制台程序均包含该操作),因此C语言提供 了专门用于从标准输入获取信息和向标准输出显示信息的函数,即scanf()和printf().此 时,从键盘获取输入,向屏幕显示信息的代码可写为:

/*

标准的C程序,读取键盘输入,向屏幕输入信息.

隐式得使用标准输入,标准输出指针.

*/

#include 

intmain(void)

{

charsbuf[100];

printf("Please input a string: ");

scanf("%s",sbuf);

printf("The input string is : \"%s\".\n",sbuf);

return0;

} 从中可看出,使用scanf()和printf()时,无需向其提供文件指针,这是因为它们知道所需 的文件指针,它们操作的对象便是标准输入和标准输出所指向的文件.

结论:

标准输入,标准输出是操作系统为C程序提供的文件指针,默认情况下,它们分别指向键盘 和屏幕.标准输入函数scanf()将从标准输入指向的文件读取信息,标准输出函数 printf()将输出信息到标准输出指向的文件.

注:标准输入,标准输出并非必须指向键盘或屏幕,用户程序可改变它们的指向.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值