A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陨石 高级黑马   /  2014-9-10 00:07  /  822 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/导入输入输出库
#include<stdio.h>
//导入standard library标准库头文件库包含了最常用的系统函数 为了使用exit()
#include<stdlib.h>
//判断字符类型函数 C语言的标准函数库中的头文件stdbool.h包含了四个用于布尔型的预定义宏。本头文件是在C99标准中引入的。
#include<stdbool.h>

/*
第八章 字符输入/输出和输入确认
关键字
缓冲区
输入字符的立即回显是非缓冲(unbuffered)或直接(direct)输入的一个实例,它表示您所键入的字符对正在等待的程序立即变为可用。
相反,延迟回显是缓冲(buffered)输入的实例,这种情况下您 所键入的字符被收集并存储在一个被 称为缓冲区(buffered)的临时存储区域中.
按下回车键可使您所键入的字符块对程序变为可用.
缓冲区分为两类:
完全缓冲(fully buffered)I/O :缓冲区满时被清空(内容被发送至其目的地)。这种类型的缓冲通常出现在文件输入中。缓冲区的大小取决于系统,但512字节和4096字节是常见的值。
行缓冲(line-buffered)I/O.:遇到一个换行字符时将被清空缓冲区。键盘输入是标准的行缓冲,因此按下回键将清空缓冲区。
缓冲还是非缓冲?ANSI C指定应该对输入进行缓冲,而K&R则将选择权留给了编译器的编写者。您可以通过运行echo.c程序并观察出现的行为来查明您的输入类型
非缓冲函数由conio.h头文件支持
文件(file)是一块存储信息的存储器区域。文件通常被保存在某种类别的永久存储器上.
C程序以文件保存,当您编译一个存储在名为echo.c的文件中的程序时,编译器打开echo.c文件并读取其内容。编译器在结束编译时关闭该文件。
其它程序,例如字处理器程序,不仅打开、读取及关闭文件,还会写文件.
具有强大、灵活等特点的C语言具有许多用于打开、读、写和关闭文件的库函数。在一个级别上,它可以使用宿主操作系统的基本文件工具来处理文件,
这种被称为低级I/O(low-level I/O),而且ANSI C也不打算这样做;然而C以第二种级别处理文件,称为标准I/O包(standard I/O package)。
这包括创建用于处理文件的I/O函数标准模型和标准集。在这一高级别上,系统之间的差异由特定的C实现来处理,所以您与之打交道的是一个统一接口。

系统差异
不同的系统存储文件的方式不同。一些系统将文件存储在一个位置而将有关该文件的信息存储在另一个位置。而另一些系统在文件本身内建立其描述信息。
处理文本时,一些系统使用单个的换行字符来标记一行的结束,而另一些系统则可能使用回车和换行字符的结合来表示一行的结束。
一些系统把文件大小的衡量为最接近的字节数,而另一些则以字节块衡量文件大小。
使用标准I/O包时,就屏蔽掉了这些差异,因此要检查一个换行符,可以使用if(ch=='\n'),哪是系统实际上使用回车/换行字符的组回,
则I/O函数自动在两种表示法之间来回转换.
从概念上来说,C程序处理一个流而不是直接处理文件。流(stream)是一个理想化的数据流,实际输入或输出映身到这个数据流。
这表示具有不同属性的多种类型的输入流表示,会具有更多统一的属性。于是打开文件的过程就成为将流与文件相关联,并通过流进行读写的过程。

文件结尾
计算机操作系统需要某种方式来断定每个文件起始和结束的位置,检测文件结尾的一种方法是在文件中放置一个特殊的字符来标志结尾。
操作系统可以使用一个内嵌的Ctrl+Z字标来标志文件结尾。如果该文件有,则操作系统就会将该字符作为文件尾标记对待。
第二种方法是让操作系统存储文件大小的信息。如果一个文件具有3000字节,而且程序已经读取了3000字节,则该程序就到达了文件尾.
对于这两种方法C的处理方法是让getchar()到达文件结尾时返回一个特殊值,而不去管扣作系统是如何检测结尾的。
赋于该值名称是EOF(End Of File,文件尾),因此,检测到文件尾时getchar()的返回值是EOF.scanf()函数在检测到文件结尾时也返回EOF.
通常EOF在stdio.h文件中这么定义 #define EOF(-1)

为什么是-1?一般情况下,getchar()返回一个范围在0到127之间的值,因为这些值是与标准字符集相对应的值。但如果系统识别一个扩展的字符集,
则可能返回从0到255的值。在每种情况中,值-1都不对应任何字符,所以可以用它来表示文件的结尾。

令程序与文件一同工作有两种方式。一种方式是明确地使用打开文件、关闭文件、读文件、写文件等等的专门函数。
第二种方式是使用一个设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向(redirect)输入和输出,
例如输入到文件和从文件中输出。将stdin流重新分配至文件.getchar()程序继续从该流中取数据,而不真正关心流是从何处获取其数据。
这种方法(重定向)比第一种方法在一些方面功能更有限,但它更容易使用,而且使您能够更加熟悉常用的文件处理技术。
输入重定向
echo_eof<words
<符号是unix、linux、dos的重定向运算符。该运算符把words文件与stdin流关联起来;将该文件的内容引导到echo_eof程序.
echo_eof程序本身并不知道或关心输入是来自文件而不是来自键盘。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马