【发布时间】:2015-09-18 05:14:38
【问题描述】:
我正在从具有字符串“ABCDEFGH”的输入文件“input.txt”中读取,并且正在逐个字符地读取它。我正在使用代码执行此操作:
ifstream plaintext (input.txt);
char ch;
if (plaintext.is_open())
{
while(!plaintext.eof()){
plaintext.get(ch);
cout<<ch<<endl;
}
plaintext.close();
}
字符串“ABCDEFGHH”被打印出来。我不知道为什么它要打印两次'H'。任何帮助,将不胜感激。我从HERE得到这个代码示例
【问题讨论】:
-
Why is iostream::eof inside a loop condition considered wrong? 的可能重复项。链接中的示例代码很糟糕,从here发布的一本书中学习。
-
啊,谢谢。我将代码更改为纯文本>> ch,它起作用了。我想我不需要使用 plaintext.get() 那么?
-
这将跳过空格(除非您将其关闭),
>>用于格式化输入,这完全取决于您想要什么。while (plaintext.get(ch))也可以工作,并且会读取文件的每个字节(除非您在 Windows 上并且文件以文本模式打开)。is_open检查也是多余的,因为如果文件未打开,流将失败,close也是多余的,因为流在销毁时会自动关闭,所以整个示例可能是for (char c; plaintext.get(c); ) std::cout.put(c);甚至只是std::cout << plaintext.rdbuf();