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

本章介绍以下内容:
更详细地介绍输入、输出以及缓冲输入和无缓冲输入的区别
如何通过键盘模拟文件结尾条件
如何使用重定向把程序和文件相连接
创建更友好的用户界面

单字符I/O:getchar()和putchar()

getchar()和 putchar()每次只处理一个字符。

/* echo.c -- 重复输入 */ 
#include <stdio.h> 
int main(void) 
{ 
char ch; 
while ((ch = getchar()) != '#') 
putchar(ch); 
return 0;
}

缓冲区

回显用户输入的字符后立即重复打印该字符是属于无缓冲(或直接)输入,即正在等待的程序可立即使用输入的字符。
大部分系统在用户按下Enter键之前不会重复打印刚输入的字符,这种输入形式属于缓冲输入
用户输入的字符被收集并储存在一个被称为缓冲区(buffer)的临时存储区,按下Enter键后,程序才可使用用户输入的字符。

为什么要有缓冲区?
首先,把若干字符作为一个块进行传输比逐个发送这些字符节约时间。
其次,如果用户打错字符,可以直接通过键盘修正错误。当最后按下Enter键时,传输的是正确的输入。

缓冲分为两类:完全缓冲I/O和行缓冲I/O。完全缓冲输入指的是当缓冲区被填满时才刷新缓冲区(内容被发送至目的地),通常出现在文件输入中。

结束键盘输入

应该用一个在文本中用不到的字符来标记输入完成,这样的字符不会无意间出现在输入中,在你不希望结束程序的时候终止程序。

文件、流和键盘输入

文件(file)是存储器中储存信息的区域。
C程序处理的是流而不是直接处理文件。流(stream)是一个实际输入或输出映射的理想化数据流。这意味着不同属性和不同种类的输入,由属性更统一的流来表示。于是,打开文件的过程就是把流与文件相关联,而且读写都通过流来完成。

文件结尾

检测文件结尾的一种方法是,在文件末尾放一个特殊的字符标记文件结尾。如今,这些操作系统可以使用内嵌的Ctrl+Z字符来标记文件结尾。
无论操作系统实际使用何种方法检测文件结尾,在C语言中,用getchar()读取文件检测到文件结尾时将返回一个特殊的值,即EOF(end of file的缩写)。
通常, EOF定义在stdio.h文件中:#define EOF (-1)

如何在程序中使用EOF?把getchar()的返回值和EOF作比较。如果两值不同,就说明没有到达文件结尾。也就是说,可以使用下面这样的表达式:
while ((ch = getchar()) != EOF)

重定向和文件

程序可以通过两种方式使用文件。
第 1 种方法是,显式使用特定的函数打开文件、关闭文件、读取文件、写入文件,诸如此类。
第2种方法是,设计能与键盘和屏幕互动的程序,通过不同的渠道重定向输入至文件和从文件输出。

混合数值和字符输入

getchar()读取每个字符,包括空格、制表符和换行符;而 scanf()在读取数字时则会跳过空格、制表符和换行符。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容