C++ C++;ifstream未读取\n?
我正在为学校做一个项目,我必须阅读一个文件,并用它做一些事情。不过这并不重要。我应该对每行执行操作,按照我现在的方式,我的ifstream对象没有检测到此项目所需的每行的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。这是我的.
'\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()?