第八章 字符输入/输出和输入验证

I/O系统指计算机内基本的输入输出系统。本质上是系统内各个功能模块之间进行数据交换的基本方式,在不同的系统中不同。
流 是一个实际输入或输出映射的理想化数据流。C处理的是流而不是直接处理文件
C建立标准I/O包,提供函数库来实现数据的传输和转换功能,从而忽略这些各个系统之中处理I/O的细节差别。

通过流,C可以进行数据I/O的重定向。
重定向可以指定输入和输出。
指定输出
echo > note
把echo处理过的数据输出到名为note的文件中。

指定输入
如:
echo < note
其中,note是文本文件(输入),echo是可执行文件(输出)。
组合重定向:
echo < note > copy
note作为输入传输给echo,并复制一份副本给copy
也可写作 echo > copy < note
因为重定向运算符的顺序不影响命令
重定向的基本原则:
1.不能连接文件和文件,也不能连接程序和程序
2.读取输入和定向输出只能有一个文件,不能多个

getchar()一次得到一个字符;putchar()一次输出一个字符。
大部分系统在不会立刻处理用户刚输入的字符,而是将其收集并储存在缓冲区中
缓冲分为两类:
1.完全缓冲I/O(缓冲区的大小取决于系统,常见是512字节和4096字节)
2.行缓冲I/O
数值和字符混合输入时,通常用scanf()函数读取数值,并配合getchar()读取缓冲区内的其他字符。但这就出现了一个问题:用键盘输入时,末尾会留下一个'\n',这个'\n'会被getchar()接收,干扰程序的正常运行。在末尾额外加一个getchar()可以解决这一问题。
书中有一段常用的代码,可以跳过本行的其他字符:

while ((ch=getchar())!='\n')
        continue;

直到遇到换行符前,字符都被读取。当然,换行符也被读取了,但它终结了这个循环

读取文件时需要知道结尾在哪。不同系统的表达方式不同,比如CTRL+D和CRTL+Z都可以表示结尾。而C语言在中把getchar()或者scanf()函数检测到文件结尾时返回的值定义为EOF,值一般等于-1(某些系统可能把EOF定义为-1以外的值)。

你可能感兴趣的:(第八章 字符输入/输出和输入验证)