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