Skip to content

字符输入/输出和输入验证

缓冲区

缓冲分为两类:完全缓冲I/O和行缓冲I/O。完全缓冲输入指的是当缓冲区被填满时才刷新缓冲区(内容被发送至目的地),通常出现在文件输入中。缓冲区的大小取决于系统,常见的大小是 512 字节和 4096字节。行缓冲I/O指的是在出现换行符时刷新缓冲区。键盘输入通常是行缓冲输入,所以在按下Enter键后才刷新缓冲区。

结束键盘输入

文件、流和键盘输入

文件时存储器中存储信息的区域,通常文件都保存在某种永久存储器中(例如硬盘、U盘或DVD等)。 在C语言中可以使用主机操作系统的基本文件工具直接处理文件,这些直接调用操作系统的函数称为底层I/O。 从概念上看,C程序处理的是流而不是直接处理文件,流是一个实际输入或输出映射的理想化数据流。 可以用处理文件的方式来处理键盘输入,例如程序读文件时要能检测文件的末尾才知道应在何处停止。因此,C内置了文件结尾检测器。既然可以把键盘输入视为文件,那么也应该能使用文件结尾检测器来结束键盘输入

文件结尾

计算机操作系统要以某种方式判断文件的开始和结束,检测文件结尾的一种方法是在文件末尾放一个特殊的字符标记文件结尾。还有一种方法是存储文件代销的信息,如果文件有3000字节,那么程序在读到3000字节的时候便到达文件末尾。MS-DOS及其相关系统使用这种方法处理二进制文件,新版DOS使用这种方法处理文本文件,UNIX使用这种方法处理所有的文件 无论操作系统使用何种方法检测文件结尾,getchar()读取文件检测到文件结尾时将返回一个特殊的值,即EOF。scanf()函数检测到文件结尾时也返回EOF 在终端输入EOF字符不能直接输入EOF字符,也不能只输入-1,可以找出当前系统的要求,例如在大多数UNIX和Linux系统中,在一行开始处按下ctrl+D会传输文件结尾信号。许多微型计算机都把一行开始处的ctrl+Z识别为文件结尾信号,一些系统把任意位置的ctrl+Z解释成文件结尾信号

重定向和文件

在默认的情况下,C语言使用标准I/O包查找标准输入作为输入源,它是把数据读入计算机的常用方式。 程序可以通过两种方法使用文件,第一种是显式使用特定的函数打开文件、关闭文件、读取文件、写入文件。第二种方法是设计能与键盘和屏幕互动的程序,通过不同的渠道重定向输入至文件和从文件输出。 在UNIX/DOS/Windows中我们可以使用<字符来进行重定向,该字符是words的文件与stdin流相关,例如想使用A程序来处理文件B,可以使用A<B的方式,A程序本身并不关心输入的内容来自文件还是键盘,它只知道这是需要处理的字符流。 我们也可以使用>来进行重定向,例如想把A程序的输出重定到文件B中,那么可以使用A>B的形式来进行重定向,但是此重定向方式一般会擦除B文件原有内容,替换成A程序的输出。

Comments