要点总结
1. 缓冲区(buffers)
- 无缓冲输入
- 显示用户输入的字符后立即重复打印该字符。
- 缓冲输入
- 系统在用户按下Enter 键后不会重复打印刚输入的字符。
- 缓存区
- 用户输入的字符被收集并存储在一个临时存储区,按下Enter 键后,程序才可使用用户输入的字符。这个临时区域叫做缓存区。
- 缓存区的目的:把若干字符作为一个块进行传输比逐个发送这些字符节约时间;如果用户打错字,可以直接通过键盘进行修改。当按下Enter键时,传输的是正确的输入。
2. 结束键盘输入
- 文件、流和键盘输入
- 文件是存储器中存储信息的区域。通常,文件都保存在某种永久存储器中。
- 流是一个实际输入或输出映射的理想化数据流。从概念上看,C语言处理的是流而不是直接处理文件。
- C的输入函数内置了文件结尾检测器。
- 文件结尾
- 方法1: 在文件末尾放一个特殊的字符标记文件结尾。
- 方法2: 利用存储文件大小信息。如果文件有3000字节,程序在读到3000字节时便达到文件的末尾。
3. 重定向和文件
-
重定向输入让程序使用文件而不是键盘来输入,重定向输出让程序输出至文件而不是屏幕。
-
示例: 假设已经编译好了echo_eof.c程序,并把可执行版本放入到一个echo_eof文件中。
- 定向输入:echo_eof < words(程序使用文本文件作为输入)
- 定向输出:echo_eof > savewords (创建一个新文件,并把程序的输出重定向到该文件)
- 组合重定向:echo_eof < words > savewords
- 注意:命令与重定向运算符的顺序无关;输入名和输出名不能相同。
4. 混合数值和字符输入
- getchar()读取每个字符,包括空格、制表符和换行符;而scanf()在读取数字时则会跳过空格、制表符和换行符。
复习题
- 什么是EOF?
- C如何处理不同计算机系统中的不同文件和换行约定?
- 在使用缓冲输入的系统中,把数值和字符混合输入会遇到什么潜在的问题?
解答
- EOF是由getchar()和scanf()返回的信号(一个特殊值),表明函数检测到文件结尾。
- C的标准I/O库把不同的文件映射为统一的流来统一处理。
- 数值输入会跳过空格和换行符,而字符输入不会。