C ++ ifstream的,检测是否字母或EOLine?
题
我有这样的功能来读取在从文件中的所有整数。 问题是,当我读到字母I引发新线和我总是1,寻求不行的末尾。我怎么能写这个功能较好?
int v;
while (!in.eof())
{
while (in >> v)
cout << v << " ";
cout << endl;
if (in.eof())
break;
in.clear();
in.seekg(1, ios::cur);
int a;
a=0;
}
解决方案
如果您的文件只包含由空格(包括)换行分隔的整数那么这应该足够了。
while( in >> v )
{
// do something with v
}
该文件之后,如果in.fail()为假,并且in.eof()为真,则到达了文件的末尾没有格式错误。否则返回错误读取int发生。
如果您收到无效输入,并希望从,那么你需要找出你想怎么监仓。如果你想跳过直到行的结束并重新开始解析,你可以使用这样的事情。
in.clear();
in.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
其他提示
第一个问题上面的代码不会在管线的端部止挡。结果 操作者>>()忽略 “的空白字符”,其包括换行字符。
这可怎么写比较好?点击 这是很难说不知道你正在尝试与数字可以做,什么文件的输入格式!
但如果我是书面方式本我将它写在不使用这些行:
if (in.eof())
break;
in.clear();
in.seekg(1, ios::cur);
当处理一个格式化文本文件是非常罕见的看到使用寻求()的
Assumign:结果 文件只包含数字。结果 你想所有的数字读入一个容器中。
std::vector<int> data;
std::copy( std::istream_iterator<int>(in), // An iterator from current point
std::istream_iterator<int>(), // To end of file.
std::inserter(data) // Destination (insert into data)
);
不隶属于 StackOverflow