我在Linux (g++ 3.4.4)和Mac (g++ 4.0.1)上尝试了你的代码,稍作修改,它工作得很好!
对于 Chuck,如果input.txt不存在,则 iffer.fail()为真。既然你说不是这样...
另一种可能性是input.txt文件与您预期的不同。 如果它的数字太少,您会看到零(或其他垃圾值)。(您可以使用iffer.eof()进行测试,但如果没有尾随空格(如换行符),则可以在读取最后一个数字后(适当地)设置。所以 在阅读之前测试 eof() !)
或者,您可以在代码的其他地方有一个悬空指针,不恰当地丢弃某些东西。有时添加和删除大块代码将允许您手动“二分查找”这些问题的实际位置。
#include <iostream>
#include <fstream>
using namespace std;
#define SHOW(X) cout << # X " = \"" << (X) << "\"" << endl
int main()
{
int x = 0;
cin >> x;
ifstream iffer;
int numbers[12];
iffer.open("input.txt");
SHOW( iffer.fail() );
SHOW( iffer.eof() );
for (int i = 0; i < 12; ++i)
{
SHOW(i);
SHOW(numbers[i]);
iffer >> numbers[i];
SHOW(numbers[i]) << endl;
}
for (int i = 0; i < 12; ++i)
SHOW(numbers[i]);
SHOW( iffer.fail() );
SHOW( iffer.eof() );
}