Как уже отмечали другие, так как вы никогда не изменяете f0
и f1
в
цикл, f2
не будет зависеть от того, сколько раз
петля. Так как вы все равно должны вывести все числа в конце,
почему бы не попробовать сохранить их в массиве. Я бы инициализировал первые два
значения вручную, затем зациклите, пока у меня не будет достаточно значений.
(Это можно сделать довольно хорошо, используя STL:
// After having read n...
std::vector<int> results( 2, 1 );
while ( results.size() < n )
results.push_back( *(results.end() - 1) + *(results.end() - 2));
Однако я не уверен, что это то, что ищет ваш инструктор.
Я скорее подозреваю, что он хочет, чтобы ты занялся индексацией себя. Просто
помните, что если вы инициализируете первые два значения вручную, ваш
Индекс должен начинаться с 2, а не с 0.)
Еще одна вещь: спецификация, которую вы публикуете, говорит, что вы должны зацикливаться, если
пользователь вводит недопустимое значение. Это на самом деле немного сложно: если
пользователь вводит что-то, что не является int
(скажем «abc»), затем 1)
std::cin
останется в состоянии ошибки (и все дальнейшие вводы будут неудачными)
пока не очищено (по телефону std::cin.clear()
), а незаконный
символы не будут извлечены из потока, поэтому ваша следующая попытка
не удастся, пока вы не удалите их. (Я бы предложил >>
в
std::string
для этого; что удалит все до следующего белого
пробел.) И не когда-либо обращайтесь к переменной, в которую вы >>
вводили до
Вы проверили поток на наличие сбоев - если ввод не выполнен. Если
Ошибка ввода, переменная, которая вводится, не изменяется. Если, как здесь, вы
не инициализировал его, тогда может произойти все что угодно.
Наконец (и я уверен, что это выходит за рамки вашего назначения), вы действительно делаете
нужно что-то сделать, чтобы проверить переполнение. За определенной точкой,
ваш вывод станет более или менее случайным; лучше остановиться и
вывод, который вы отказываетесь в этом случае.