- 【缓冲输入】单字节IO: 在输入的内容全部到缓冲区了之后才会执行操作。
- getchar()和putchar()
while((ch = getchar()) != '#')
putchar(ch);
2. 【非缓冲(buffered)输入】输入的内容如何立即回显呢 ?
3.为什么需要缓冲输入?
将若干个字符作为一个快传输比逐个发送这些字符所耗费的时间较少。像我们在游戏中,希望一按键就能执行某个命令。
4.缓冲分为两类:完全缓冲(fully buffered)和行缓冲(line-buffered)IO。
▪ 对于完全缓冲:如果缓冲区满了之后就将被清空,内容被发送至其目的地。这种类型的缓冲通常书现在文件输入中,缓冲区的大小取决于系统。512和4096是常见的值。(字节)
▪ 对于行缓冲:遇到一行换行字符时便清空缓冲区。
▪ IBM PC 中:conio.h 中,包括用于回显的非缓冲输入的getchar()和用于不回显的的非缓冲输入getchar()。
▪ 5. 从概念上来讲,C语言程序处理一个stream而不是直接处理文件。流(stream)是一个理想化的数据流,实际输入或者输入映射到这个数据流。打开文件时的过程就成为了流与文件相关联,并通过流进行读写的过程。
▪ 6. 键盘的输入由一个被称为 stdin 的流表示,而到屏幕上的输入则是由一个stdout的流表示。getchar,putchar printf scanf 都是标准的IO包的文件。
▪ 7.文件结尾的判断和读写
▪ 文件结束:方法1:都是使用一个内嵌的CTRL+Z字符来表示文件结尾。
▪ 方法2:让操作系统存储文件大小的信息。如果一个文件有3000 字节,程序已经读取了3000.则程序便到达了文件结尾。 该文件内容可以包含 ctrl+Z等一系列的字节。 Unix系统 DOS 都是此种使用方法。
▪ 8.C中定义的关于文件结尾的判断。 C:让getchar()在文件到达结尾时返回一个特殊值(EOF:-1)。在stdio.h中定义:#define EOF (-1)。
▪
▪ 关于程序代码的书写:int ch; while((ch = get char())!=EOF).
▪ 如果不是从文件中读写,一般的系统都具有从键盘模拟文件结束条件的方法。
▪
▪ 所以,我们在键盘输入的时候也可以如此写:
▪ while((ch = get char())!=EOF)
9. while((ch = get char())!=EOF)
ch 需要从 char类型改变到int类型。
▪
10.重定向和文件
▪ 文件和程序一同工作有两种方式:
▪ 1)明确的指出打开,关闭,读,写 等文件的专门函数。
▪ 2)设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向输入和输出。换句话:就是你讲stdin流重新分配至未见,getchar程序继续从该流中取数据,而不关心从哪个地方获取数据。
▪ Unix Linux 和DOS心在可以使用重定向输入和输出。
▪ 输入重定向:可以使我们的程序能够使用文件代替键盘输入。
▪ 输出重定向:使程序能够使用文件代替屏幕作为输出。
▪
▪ /* echo_eof.c*/
▪ #include <stdio.h>
▪
▪ int main(int argc, const char * argv[])
▪ {
▪ int ch;
▪
▪ while((ch = getchar()) != EOF)
▪ {
▪ putchar(ch);
▪
▪ }
▪
▪ return 0;
▪ }
11。输入重定向的操作。
1) 编译- 连接-成 echo_eof .exe 文件。
2) 假如 words是一个文本文件的名称,如果你想通过文件而非键盘输入。
3) dos下: echo_eof < words (有些系统 中这个代码不能有空格。)
12.输出重定向的操作
1) 假如你想将你的键盘输入发送给一个叫 mywords 的文件。
2) DOS: echo_eof > muwords
3) 结束符:UNix下:ctrl+D,dos下:ctrl+Z。
13. 组合重定向:
希望制作文件mywords 一个副本,名字为 savewords。
echo_eof <mywords>savewords
或者 echo_eof>saveword<mywords.
顺序是无关的。但是两个文件不能有相同的文件名。
14.Unix linux和dos系统还有
i. >>运算符,该运算符可让您对一个现有的文件的末尾追加数据。
ii. |管道符:将一个程序的输入和另一个程序的输入连接起来。
15.创建一个更加友好的页面: