概述
一、单字符I/O:getchar()和putchar()
int getchar(void);
int putchar(int char);
函数原型在stdio.h头文件中
二、缓冲区
输入形式:
(1)无缓冲输入:回显用户输入,然后立即重复打印
(2)缓冲输入:回显用户输入,并在用户按下Enter键之后,才打印输入的所有字符
回显:将用户输入的字符直接显示在屏幕上
缓冲输入:
用户输入的字符被收集并存储在缓冲区(一个临时存储空间)中,在用户按下Enter键之后,程序才可以使用用户输入的字符
缓冲区的大小取决于系统,常见为512字节和4096字节
缓冲输入的优点:
(1)将若干字符作为一个块传递比逐个发送这些字符节约时间
(2)方便用户修改输入,确保最后显示的是用户期望的内容
缓冲输入分类
(1)完全缓冲I/O:当缓冲区被填满后才刷新缓冲区(将内容发送到目的地),通常用在文件输入中
(2)行缓冲I/O:遇到换行符时刷新缓冲区,最常用于键盘输入
现在的C标准规定:输入是缓冲的
三、结束键盘输入
文件:指存储器中储存信息的区域。
底层I/O:主机操作系统的基本文件工具,可以直接调用操作系统的函数
标准I/O:C语言从较高层面上创建的用于处理文件的标准模型和一套标准I/O函数。由具体的C实现负责处理不同系统的差异,从而使用户能够使用统一的界面。(在不同的系统中,标准I/O的名字与功能都是相同,但代码实现可能有所不同)
从概念上看,C程序处理的是流而不是直接处理文件。这意味着不通属性和不同种类的输入由属性更统一的流来表示。
流:是数据从数据源到目标地址的一个过程,分为输入流(输入过程)和输出流(输出过程)。
C语言将键盘和显示设备都当作文件,键盘的文件名叫stdin,显示设备的文件名叫stdout,stdio.h中的getchar()、scanf()默认从stdin文件读取内容,putchar()和printf()默认将内容发送到stdout文件(向显示设备发送内容)
文件结束标记:计算机操作系统通过在文件结尾放置特殊字符来标记文件的结束位置。不同的操作系统,文件结束标记不同。
因为将键盘看作文件,所以可以使用文件结束标记来结束键盘输入。
键盘模拟文件结束标记:Windows下,Ctrl+Z;Linux下,Ctrl+D
EOF:在C语言中,用一个特殊值——EOF(end of file)表示文件结尾,这个值被定义在stdio.h中,通常为-1
四、重定向和文件
可以把文件看作是蓄水池,文件中的内容看作水。流就是数据通过从一个文件进入另一个文件的过程。通过使用C语言编写程序,可以连接两个文件,促使数据进行流动。至于两个文件的位置在哪,C语言并不关心。可以将程序视为一条水管,可以连接任意符合输入输出条件的蓄水池。
所以,可以通过重定向操作,为输入流和输出流指定文件,并不一定非得是键盘和显示设备。
重定向操作与操作系统有关,与C无关。
重定向输入:让程序将文件作为数据源获取数据
重定向输入运算符:<
重定向输出:让程序将数据发送至文件中
重定向输出运算符:>
示例程序:exp.c
#include <stdio.h>
int main(void)
{
int ch;
//将ch设置为int类型,以便和EOF进行比较
while((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
exp.c通过getchar()从标准输入(键盘)获取数据,并通过putchar()将数据发送至标准输出(屏幕)。假设此程序经过编译后,得到可执行程序exp。exp就相当于一条水管
//重定向输入
./exp < text1
//从文件text1中获取数据,并将数据发送至屏幕
//重定向输出
./exp > text2
//从键盘获取数据,并将数据发送至文件text2中
//如果text2已存在,则先删除其中的内容,然后输入新内容
//如果text2不存在,则创建一个名为text2的新文件,然后输入内容
//重定向输入、输出
./exp < text1 > texe2
//从文件text1中获取数据,将数据发送至text2中
./exp > text2 < text1
//这条命令执行的动作与上面的命令一样
//组合重定向,两个重定向运算符的先后顺序无所谓,但输入文件和输出文件不可以同名
通过重定向运算符,可以将输入端从键盘改接到文件text1,也可以将输出端从屏幕改接到文件text2
重定向运算符连接一个可执行程序(水管)和一个数据文件(蓄水池),不能用于连接两个文件或两个可执行程序
重定向运算符不能一次性读取多个文件的输入,也不能一次性向多个文件进行输出
最后
以上就是潇洒高跟鞋为你收集整理的C Primer Plus 第八章的全部内容,希望文章能够帮你解决C Primer Plus 第八章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复