C++ ifstream没有读取\n?

Pul*_*nda 6 c++ text newline project ifstream

我正在为学校做一个项目,我必须阅读一个文件,然后用它来做.但这并不重要.我应该按行进行操作,以及我现在拥有它的方式,我的ifstream对象不会检测'\n'每个行的字符,这是该项目所需的.这是我现在的方式:

ifstream instream;
instream >> value;
while(value != '\n')
    //do code and such
Run Code Online (Sandbox Code Playgroud)

但是当我让它运行循环时,我得到的只是程序中所有内容的一行.虽然它正在完成它在循环中应该做的事情,我需要\n才能被识别.这是我的.txt文件:

LXXXVII
cCxiX
MCCCLIV
CXXXLL
MMDCLXXIII
DXLCC
MCdLxxvI
XZ
X
IV
Run Code Online (Sandbox Code Playgroud)

就是这样.我无法改变它.任何有关我能做什么的帮助将不胜感激!万分感谢!

编辑:另外,我怎么能检测到我在文件的末尾?感谢:D

Jon*_*ely 14

所述>>操作者做了"格式的输入操作",这意味着(除其他外)它跳过空格.

要在不跳过空格的情况下逐个读取原始字符,您需要使用"无格式输入操作",例如istream::get().假设value是类型char,您可以阅读每个字符instream.get(value)

当您到达EOF时,读取将失败,因此您可以读取循环中的每个字符,例如:

while (instream.get(value))
  // process value
Run Code Online (Sandbox Code Playgroud)

但是,要逐行阅读,您可以阅读std::string并使用std::getline

std::string line;
while (getline(instream, line))
  // ...
Run Code Online (Sandbox Code Playgroud)

这是一个无格式的输入操作,它读取\n字符串中的所有内容,然后丢弃该\n字符(因此您需要\n在每个erad行之后手动追加一个来重建原始输入)