8.9 总结

许多程序使用getchar()来逐个字符地读取输入。通常,系统使用行缓冲输入(line-buffered input),这意味着输入的内容在您按下回车键时被传输给程序。按下回车键的同时还将传输一个编程时需要注意的换行字符。ANSI C把缓冲输入作为标准。

名为标准I/O包的一系列函数是C的一个特性,该函数系列以统一的方式处理不同系统上的不同文件格式。getchar()和scanf()函数属于这一函数系列。检测到文件尾时,这两个函数都返回EOF值(在stdio.h头文件中定义)。在Unix系统中,您能通过在一行的开始键入Ctrl+D来从键盘模拟文件结束条件;DOS系统则使用Ctrl+Z来达到这一目的。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

许多操作系统(包括Unix和DOS)都具有重定向的特性,该特性使您能够使用文件代替键盘和屏幕作为输入和输出。这样,读取输入时以EOF为结束信号的程序就可以用于键盘输入和模拟的文件尾信号,或者用于重定向的文件。

如果混合使用scanf()和getchar()函数,那么当调用getchar()之前scanf()恰好在输入中留下一个换行符时,将会产生问题。然而,如果知道这个问题,就可以在编程中解决它。

当您编写程序时,要仔细地计划用户界面。尝试预见用户可能犯的错误类型,然后设计您的程序对其进行处理。