大家好,欢迎来到IT知识分享网。
stdout,stdin, stderr是一个C程序中默认开启的三个数据流(文章只介绍stdout, stdin.)
stdout — 标准输出流 — 屏幕
stdin — 标准输入流 — 键盘
stderr — 标准错误流 — 屏幕
我们写程序时,有时想把数据输出到屏幕上,有时想把数据输出到硬盘上,有时候想把数据输出到软盘上,有时想把数据输出到光盘上…
所以我们在写程序的时候会经常操控各种各样的硬件,硬件的不同,读写方式也不同,所以我们难道要懂得各种各样硬件的读写方式吗
所以在程序和硬件中间高度抽象了一个流的概念,我们只需要把数据丢给流,它帮我们来完成对应硬件的读写方式,我们就便利了许多。
一、stdout介绍
我们先看看printf()函数
函数
printf
int printf(const char* format, …);
将格式化数据打印到标准输出
将格式指向的C字符串写入标准输出(stdout)。如果格式包含格式说明符(以“%”开头的子序列),则格式后面的附加参数将被格式化并插入到结果字符串中,以替换其各自的说明符。
这里提到了将指向的C字符串写入标准输出,
我们写printf(“hello world!”);就自动输出到屏幕上,就是因为printf()函数默认把(格式化)字符串输出到stdout流,也就是屏幕上。
与fprintf()函数比较
函数
fprintf
int fprintf(FILE* stream, const char* format, …);
将格式化的数据写入流
将格式指向的C字符串写入流。如果格式包含格式说明符(以“%”开头的子序列),则格式后面的附加参数将被格式化并插入到结果字符串中,以替换其各自的说明符。
在format参数之后,函数需要至少与format指定的数量相同的附加参数。
我们可以用printf()和fprintf()作对比
fprintf()函数前面多了一个FILE* stream的参数,它表示的是流的意思。 前面说过,printf()是默认输出到stdout流,这里的fprintf()函数就可以自己设置输出到哪个流。
如果fprintf()函数的第一个参数是stdout, 可以等价于printf()函数。
二、stdin介绍
我们来看看scanf()函数和fscanf()函数的区别
函数
sacnf
int scanf(const char* format, …);
从标准输入读取格式化数据
从stdin读取数据,并根据参数格式将其存储到附加参数所指向的位置。
附加参数应指向已分配的对象,该对象的类型由格式字符串中相应的格式说明符指定。
函数
fsacnf
int fscanf(FILE* stream, const char* format, …);
从流中读取格式化数据
从流读取格式化数据从流读取数据,并根据参数格式将其存储到附加参数所指向的位置。
附加参数应指向已分配的对象,该对象的类型由格式字符串中相应的格式说明符指定。
我们不难得出,fscanf()函数的范围更加广一些,我们可以把第一个参数写成文件指针,那么我们可以从一个文件中读取到信息(fprintf()函数也可以第一个参数位文件指针,可以输出到文件当中,就不会显示到我们的屏幕上)。
当然,也可以是stdin,这和scanf()函数等价。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/135362.html