有几件事需要考虑:
让我们假设你在每一行都有两个数字,然后是你不关心的文字.
while(inFile >> rows >> columns)
{
// Successfully read rows and columns
// Now remove the extra stuff on the line you do not want.
inFile.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
}
Run Code Online (Sandbox Code Playgroud)
另请注意,如果将整数值分开的唯一内容是"空格",那么您甚至不需要使用ignore()行.
上面的while()有效,因为:operator >>返回一个流对象(引用).因为流对象正在布尔上下文中使用,所以编译器将尝试将其转换为bool,并且流对象具有执行该转换的强制转换运算符(通过在流上调用good()).
需要注意的重要事项是不要使用该行
while(inFile.eof())
Run Code Online (Sandbox Code Playgroud)
如果您确实使用了这个,那么您将陷入最后一行问题的陷阱.如果您已经读取了所有数据,则eof()仍然是假的(因为在您尝试阅读过去的EOF之前不是这样).因此文件中没有剩余数据,但您仍然可以进入循环体.在你的代码中,然后执行getline()并失败(不再有数据),现在设置了EOF.循环的其余部分将取决于inLine的定义方式和位置.
您可以使用上述测试.但是你必须愿意在使用它之后测试流是否正常.
while(inFile.eof()) // Should probably test good()
{
getLine(inFile,inputline);
if(inFile.eof()) // should probably test good()
{
break;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12059 次 |
| 最近记录: |