C++中的文件尾条件
来源:互联网 发布:村淘宝服务站怎样赚钱 编辑:程序博客网 时间:2024/06/11 15:47
如果程要读入来自键盘的文本输入,就必须有办法知道何时停止读取。其中一种方法是选择某个特殊字符—有时被称为标兵字符。但是如果输入来自文件,则可以使用一种功能更强大的技术——检测文件尾(EOF)。C++输入工具和操作系统协同工作,来检测文件尾并将这种信息告诉程序。
乍一看,读取文件中的信息似乎同cin和键盘输入没有什么关系,但其实存在两个相关的地方。首先,很多操作系统(包括unix,linux和windows命令提示符模式)都支持重定向,允许用文件替换键盘输入。假如,假设在windows中有一个名为gofish.exe的可执行文件,则可以在命令提示符模式下输入下面的命令:
gofish <fishtale
这样,程序将从fishtale文件(而不是键盘)获取输入。<符号是unix 和windows命令提示符模式的重定向运算符。
其次,很多操作系统都允许通过键盘来模拟文件尾条件。在unix操作系统中,可在行首按下ctrl+d来实现;在windows命令提示符模式下,可以在任意位置按ctrl+z和enter。有些C++实现支持类似的行为,即使底层操作系统并不支持。键盘输入的EOF概念实际上是命令行环境遗留下来的。然而,用于mac的SymantecC++模拟了unix,将ctrl+d视为仿真的EOF。Metrowerks Codewarrior能够在Macintosh和windows下识别ctrl+z。用于pc 的Microsoft Visual C++,Borland C++5.5 和GNU C++能够识别行首的ctrl+z,但用户必须随后按下回车键。总之,很多pc 编程环境都将ctrl+z视为模拟的EOF,但具体细节(必须在行首还是可以在任何位置,是否必须按下回车键等)个不相同。
如果编程环境能够检测EOF,可以使用重定向文件,也可以使用键盘输入,并在键盘中输入模拟EOF。
检测到EOF后,cin将两位(cofbit和failbit)都设置为1。可以通过成员函数eof()来查看eofbit是否被设置;如果检测到EOF,则cin.eof()将返回bool值ture。否则返回false。同样,如果eofbit和failbit被设置为1,则fail()成员函数返回true,否则返回false。注意,eof()和fail()方法报告最近读取的结果;也就是说,他们在事后报告,而不是预先报告。因此,应将cin.eof()和cin.fail()测试放在读取之后,下面的程序设计体现了这一点。
#include<iostream>using namespace std;int main(){char ch;int count=0;cin.get(ch);while(cin.fail()==false){cout<<ch;++count;cin.get(ch);}cout<<endl<<count<<" character read \n";return 0;}
下面是该运行的情况:
这是在windows下运行程序。输入第一行后按下enter。然后输入第二行按下enter键。最后按下ctrl+z 和enter 键。
- C++中的文件尾条件
- C++中的文件尾条件--EOF
- c中的条件编译
- C语言中的条件编译
- C语言中的条件编译
- 遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义
- 文件尾条件
- c语言中的条件运算符
- 关于c语言中的条件编译
- C语言中的条件运算符
- 6.c语言中的条件语句
- c/c++中的条件编译实例
- 条件收敛中的黎曼定理 C语言
- C语言 条件判断中的关系表达式
- c语言中的条件编译指令
- 巧用C语言中的条件编译
- 【C++】使用条件编译的头文件
- 一个关于将满足给定条件的数据按顺序写到另一文件中的C语言函数。
- V4L2 简介
- Andoid GPS如何进入省电模式
- nyoj-动态规划-234-吃土豆-201308131021
- 博客
- 转:GCC头文件和库文件搜索路径问题
- C++中的文件尾条件
- 是用setProperty("select",y)的出错
- SpringMVC JSON
- Ubuntu下PHP开发环境的搭载(附VIM预览php文件配置)
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- servlet request getHeader("x-forwarded-for") 获取真实IP
- javax.xml.datatype.XMLGregorianCalendar
- 【jiasuba】什么是MAC地址?怎么查看MAC地址?
- jQuery验证插件