猿问
下载APP

eof()不好的做法?

eof()不好的做法?

所以我一直eof()在我的很多需要文件输入的程序中使用该函数,而我的教授说使用它很好,但SO上的一些人说我不应该在没有真正说明原因的情况下使用它。所以我想知道,有充分的理由吗?



吃鸡游戏
浏览 20回答 3
3回答

天涯尽头无女友

您可以使用它eof来测试它报告的确切条件 - 您是否尝试读取文件的结尾。您不能使用它来测试是否有更多的输入要读取,或者读取是否成功,这是更常见的测试。错误:while&nbsp;(!cin.eof())&nbsp;{ &nbsp;&nbsp;cin&nbsp;>>&nbsp;foo;}正确:if&nbsp;(!(cin&nbsp;>>&nbsp;foo))&nbsp;{ &nbsp;&nbsp;if&nbsp;(cin.eof())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"read&nbsp;failed&nbsp;due&nbsp;to&nbsp;EOF\n"; &nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"read&nbsp;failed&nbsp;due&nbsp;to&nbsp;something&nbsp;other&nbsp;than&nbsp;EOF\n"; &nbsp;&nbsp;}}

慕莱坞森

您不应该使用它,因为如果由于其他原因输入失败,您可能会被搞砸。while(!file.eof())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;>>&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;doSomething(i);}如果文件内容为“WHAARRRRRRGARBL”,上述循环会发生什么?它无限循环,因为它不是文件的结尾,但你仍然无法从中提取int。

守着一只汪

如果上述答案令人困惑:人们认为它的作用是错误的:eof()不会查看您读取的最后一部分是否包含文件的最后一个字节。它不会查看下一个字节是否在文件结尾之后。它实际上做了什么:eof()报告最后一次读取是否包含超过文件末尾的字节。如果eof()为真,那你就犯了一个错误。因此解释了教授的说法。使用它意味着什么,发生了错误。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答