C++ C++;ifstream未读取\n?

C++ C++;ifstream未读取\n?,c++,text,project,newline,ifstream,C++,Text,Project,Newline,Ifstream,我正在为学校做一个项目,我必须阅读一个文件,并用它做一些事情。不过这并不重要。我应该对每行执行操作,按照我现在的方式,我的ifstream对象没有检测到此项目所需的每行的'\n'字符。以下是我现在的情况: ifstream instream; instream >> value; while(value != '\n') //do code and such 但是当我让它运行循环时,我得到的只是一行程序中的所有内容。虽然它在做循环中应该做的事情,但我需要识别\n。这是我的.

我正在为学校做一个项目,我必须阅读一个文件,并用它做一些事情。不过这并不重要。我应该对每行执行操作,按照我现在的方式,我的ifstream对象没有检测到此项目所需的每行的
'\n'
字符。以下是我现在的情况:

ifstream instream;
instream >> value;
while(value != '\n')
    //do code and such
但是当我让它运行循环时,我得到的只是一行程序中的所有内容。虽然它在做循环中应该做的事情,但我需要识别\n。这是我的.txt文档:

LXXXVII
cCxiX
MCCCLIV
CXXXLL
MMDCLXXIII
DXLCC
MCdLxxvI
XZ
X
IV
一模一样。我不能改变它。对于我所能做的任何帮助,我们将不胜感激!非常感谢


编辑:另外,当我在文件末尾时,我如何能够检测到?谢谢:D

运算符执行“格式化输入操作”,这意味着(除其他外)它跳过空白

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

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

while (instream.get(value))
  // process value
然而,要逐行阅读,您可以读入
std::string
并使用
std::getline

std::string line;
while (getline(instream, line))
  // ...

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

您可以按如下方式读取文件:

 ifstream instream("file.txt);
 string line;
 while (instream >> line)
 {
    cout << line;
    if (instream.peek() == '\n') //detect "\n"
    {
       cout <<endl;
    }
 }
 instream.close();
ifstream-instream(“file.txt”);
弦线;
while(流内>>行)
{

我猜你在找这个:
instream.unset(std::ios_base::skipws)

什么数据类型是
value
?您可能希望使用
value=cin.get()
而不是
cin>>value
。如果您想读取行,请使用一个读取行的函数",你真正的意思是空行。value是字符类型,它不能是任何类型的数组,那么我用什么来代替呢?和@DavidSchwartz,我的意思是\n我真正的意思是这行的结尾。阅读关于
getline
@wbAnon基于你的评论,Ben Voigt的评论应该可以解决你的问题。好的,我知道你从哪里来。我也会的使用
instream.get(value)
yes时,获取\n作为
value
的值,假设
value
的类型为
char
ok,那么代码
instream.get(value)
没有为
\n
赋值。知道为什么吗?为什么不用getline将整行内容读入一个std::string?您可以在以后随意解析字符串,而不需要用\n模糊处理,因为正如Jonathan所解释的,它是从std::string中剥离出来的。因为我根本不能使用字符串进行赋值@wbAnon如果是这种情况,请参阅“”,了解一些信息我知道如何让它逐字符读取文件,问题是它拒绝读取每行末尾的\n字符。@wbAnon是否尝试改用fstream::get()?