EOF功能故障
Function trouble with EOF
我有一个函数,它应该逐个读取文件并输出到控制台,直到它到达EOF。这个函数可以很好地显示我想要的所有字符,但它一直在运行,并且永远不会在最后停止。
以下是的功能
void displayAllLines(ifstream &joke)
{
char ch;
joke.clear();
ch = joke.get();
while (ch != EOF)
{
cout << ch;
ch = joke.get();
}
}
下面列出的文件内容
"(空行)Q: 舌头对牙齿说了什么?"
正如我所说,它显示的行很好,但循环一直在问号后面。
有什么想法吗?此外,是否需要更多的信息来正确回答我的问题?
实现这一点的规范方法是:
void displayAllLines(ifstream &joke)
{
char ch;
while (true)
{
ch = joke.get();
if (joke) {
cout << ch;
} else {
break;
}
}
}
表达式joke
将计算为true,直到它达到EOF为止。我不知道你为什么要先打给joke.clear()
。
@Phil回答了"如何在C++中做到这一点"。我的答案是"为什么会发生这种情况"answers"如何在C中做到这一点"(它在C++中仍然有效)。
由于ASCII表从1一直向上,并且我们为字符串终止保留了字节值0(' '
)(使用C和C++语言),因此EOF需要是它之外的一个特殊值。
这就是为什么getchar()
和ifstream::get()
返回int
,而不是char
。所以你所需要做的就是改变
char ch;
至
int ch;
并将其铸造成焦炭进行打印:
cout << (char) ch;
从技术上讲,EOF通常是-1
。您的char
可能具有范围0 - 255
,这意味着它永远不会等于-1
。不过,一个启用了-Wall
的不错的编译器应该至少会给你一个警告。
相关文章:
- C ;使用lambdas在类中有条件地扩展功能(MWE的SEG故障)
- 我的班级功能的分段故障
- 类功能的分割故障
- 该功能的第二个调用中的分割故障
- 具有持久功能的JavaScript中的分割故障
- 功能本地静态为Windows XP生成故障代码
- 从C 中的功能返回时分割故障
- 分割故障,可能的原因:功能指针,多线程,STL地图等
- 简单的C++字符数组加密功能 - 段故障
- C++istream EOF不能保证故障位
- 功能结束后的 SEG 故障 (C++)
- 分段故障当char数组在功能中声明时
- 具有OPENCV的功能检测失败而seg故障
- 在C++故障中集成Goempertz功能
- QtCore,QMutex 类,锁定功能 - 堆栈溢出故障
- EOF功能故障
- Lambda功能,防止分段故障
- 虚拟功能故障
- 输出功能C++出现故障
- 单链表显示功能分段故障