C++ .eof()在使用数组时替换

C++ .eof()在使用数组时替换,c++,C++,所以最近我了解到使用.eof可以被认为是一种大禁忌,我想开始远离它。我看到的一个主要替代方法是使用 while(inFile >> num) { } 但是,当我使用数组执行此操作时,它只存储第一个输入,而不存储其他内容。有什么建议吗 例如: while(inMovie >> title[x]) { inMovie >> income[x]; x++; } 你真正想做的是: while ((inMovie >> title[x]

所以最近我了解到使用.eof可以被认为是一种大禁忌,我想开始远离它。我看到的一个主要替代方法是使用

while(inFile >> num)
{

}
但是,当我使用数组执行此操作时,它只存储第一个输入,而不存储其他内容。有什么建议吗

例如:

while(inMovie >> title[x])
{
    inMovie >> income[x];
    x++;
}

你真正想做的是:

while ((inMovie >> title[x]) && (inMovie >> income[x]))
{
   x++;
}
或者更简洁地说:

while (inMovie >> title[x] >> income[x])
{
   x++;
}
这样,两个输入操作都必须“成功”才能继续

也就是说,您的尝试没有内在的缺陷,只要输入正确,就没有理由“只存储第一个输入”

检查您的输入


我还担心您可能没有正确使用数组。您的阵列是否有足够的空间容纳所有这些元素?或者您是否希望
标题
收入
自动扩展?因为他们不会那样做。在这种情况下,你的程序有未定义的行为(可能会产生各种奇怪的结果)。你应该考虑使用向量。

你能给我们一个最小但完整的例子吗?完成这项工作是我发现很明显有效的一种方法。我会为(;inMovie>>标题[x]>>收入[x];x++){}做
,但您的示例看起来会按原样工作。什么使您认为它只存储了第一个输入?在循环体中,您应该将
num
存储在您想要存储的位置it@scohe001在该代码中,用户可能导致缓冲区溢出。@M.M如何?在不知道
title[x]
的类型,甚至不知道该类型的
>
运算符是否已重载的情况下,如何确定这一点?这允许input@M.M.在什么意义上?输入可以一直提供值,直到
title[x]
访问超出范围(程序不应允许用户输入导致未定义的行为)@M.M我在回答中没有说过吗?