Я попробовал ваш код, слегка измененный, на обоих Linux (g ++ 3.4.4) и Mac (g ++ 4.0.1) и он работает просто отлично!
Что касается Чака, если input.txt не существует, iffer.fail () имеет значение true. Поскольку вы говорите, что это не так ...
Другая возможность - это файл , отличный от input.txt , чем вы ожидали. Если бы в нем было слишком мало чисел, вы бы увидели нули (или другие значения мусора). (Вы можете проверить с помощью iffer.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() );
}