第一学期的C ++作业,这是我遇到的一件事:
基本上这个txt文件在它的每一行都有三个数字 - 循环将它们读入三个变量并使用它们创建一个对象并使用它进行处理。我们必须使用三种不同的循环技术来做到这一点。前两个是使用基于for循环的计数器和基于while循环的标记值完成的,对我来说是直截了当的。
最后一个虽然说“编写一个文件循环结束,它在条件表达式中从fin读取整数到x。” (fin是ifstream对象)
这样的事情有用吗?
while (fin >> x && !fin.eof())
{
rest of loop stuff
}
对于我来说,在循环的条件表达式中读取变量的内容对我来说似乎很奇怪。做这样的事情会不会更有意义呢?
while (!fin.eof())
{
fin >> x;
rest of loop stuff
}
谢谢,感谢任何指导!
答案 0 :(得分:3)
您始终想要检查您的输入是否成功在之后读取了该值!您通常不希望使用eof()
来控制输入循环:检查它是错误的条件。
例如,您发布的两个代码示例出现了问题:
while (fin >> x && !fin.eof())
)将不会处理最后一个值。虽然这在文件中很少发生,但在从字符串流(std::istringstream
)读取时经常会发生这种情况。eof()
将是false
,读取将失败,值将保持不变,并且您将对其进行两次处理。规范输入循环总是看起来基本上是这样的:
while (in >> values) {
<process-data-here>
}
如果读取值看起来有一些变化,例如,它也可以使用std::getline(in, line)
,但它总是读取值并验证流是否处于失败状态。