Когда я пытаюсь скомпилировать код, я получаю сообщение об ошибке else without a previous if
:
// Fibonacci series using recursion
#include <iostream>
using namespace std;
int fib (int n);
int main()
{
int n, answer;
cout << "\n\n\t\tEnter number to find: ";
cin >> n;
cout << "\n\n";
answer = fib(n);
if(n < 3 && n > 1)
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
{
if(n < 3)
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
else
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
else
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
return 0;
}
int fib (int n)
{
cout << "Processing fib (" << n << ")... ";
if (n < 3)
{
cout << "Return 1!\n";
return 1;
}
else
{
cout << "Call fib(" << n-2 << ") ";
cout << "and fib(" << n-1 << ").\n";
return( fib(n-2) + fib(n-1));
}
}
Ваши недостающие похвалы (фигурные скобки) после вашего if
if(n < 3 && n > 1)
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
{
if(n < 3)
средства
if(n < 3 && n > 1)
{
cout << answer << " is the " << n;
} // end of if
cout << "nd Fibonacci number\n"; // always executed
{ // new anonymous block
if(n < 3)
Конечно, это проблема с ключевыми скобками:
int main()
{
int n, answer;
cout << "\n\n\t\tEnter number to find: ";
cin >> n;
cout << "\n\n";
answer = fib(n);
if(n < 3 && n > 1) {
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
if(n < 3) {
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
} else {
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
}
else {
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
}
return 0;
}
Попробуй это:
int main()
{
int n, answer;
cout << "\n\n\t\tEnter number to find: ";
cin >> n;
cout << "\n\n";
answer = fib(n);
if(n < 3 && n > 1)
{
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
if(n < 3)
{
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
}
else
{
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
}
else
{
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
}
return 0;
}
Убедитесь, что ваш if
с и else
Они соответственно находятся в фигурных скобках.
Вы не добавили скобки в некоторые предложения if else с несколькими операторами. Не делайте этого в реальном мире кодирования.
Измените код следующим образом:
// Fibonacci series using recursion
#include <iostream>
using namespace std;
int fib (int n);
int main()
{
int n, answer;
cout << "\n\n\t\tEnter number to find: ";
cin >> n;
cout << "\n\n";
answer = fib(n);
if(n < 3 && n > 1)
{
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
if(n < 3)
{
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
}
else
{
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
}
else {
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
}
return 0;
}
int fib (int n)
{
cout << "Processing fib (" << n << ")... ";
if (n < 3)
{
cout << "Return 1!\n";
return 1;
}
else
{
cout << "Call fib(" << n-2 << ") ";
cout << "and fib(" << n-1 << ").\n";
return( fib(n-2) + fib(n-1));
}
}
(Редактировать: Это полностью переработанный ответ. Смотрите комментарии. Спасибо и извините за «полемику».)
Потому что вы не правильно использовали скобки («фигурные скобки», {
а также }
) в вашем main
,
Сначала давайте возьмем эту внутреннюю часть кода:
if(n < 3)
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
else
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
Этот текущий отступ является «неправильным» и вводящим в заблуждение. Если вы копируете и вставляете его в редактор кода и используете автоформатирование (автоотступ будет достаточно), вы получите:
if(n < 3)
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
else
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
который показывает вам реальное «значение» кода. После добавления скобок и пустых строк для наглядности:
if(n < 3)
{
cout << answer << " is the " << n;
}
cout << "st Fibonacci number\n";
else
{
cout << answer << " is the " << n;
}
cout << "rd Fibonacci number\n";
Как видите, только первый cout
Заявление обусловлено if
, Второй всегда будет выполнен. Затем приходит else
который следует за «простым», «безусловным» оператором, а не «условным» оператором / блоком (блок оператора (ов) в целом тоже является оператором).
Чтобы исправить эту часть, вы должны заключить все условные выражения в фигурные скобки:
if(n < 3)
{
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
}
else
{
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
или в более компактном стиле:
if(n < 3) {
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
} else {
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
такой что полный блок-заявление обусловлен.
Теперь, когда «внутренняя» часть if-else исправлена, давайте возьмем «внешнюю» if-else:
if(n < 3 && n > 1)
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
{
/* ... fixed inner if-else ... */
}
else
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
Давайте снова использовать средство форматирования кода:
if(n < 3 && n > 1)
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
{
/* ... fixed inner if-else ... */
}
else
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
Реальный смысл теперь должен быть понятен (здесь используется компактный стиль):
if(n < 3 && n > 1) {
cout << answer << " is the " << n;
}
cout << "nd Fibonacci number\n";
{
/* ... fixed inner if-else ... */
}
else {
cout << answer << " is the " << n;
}
cout << "th Fibonacci number\n";
Забавный блок один посередине (код внутри фигурных скобок, но не сразу после if
/else
) на самом деле является анонимным блоком, который просто вводит внутреннюю область видимости (переменные, определенные внутри, больше не будут существовать после закрытия }
). Это можно увидеть как простое утверждение (безусловное), так же, как cout << "nd Fibonacci number\n";
чуть выше.
Еще раз, исправление очевидно:
if(n < 3 && n > 1) {
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
/* ... fixed inner if-else ... */
} else {
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
}
Вы забыли использовать {} для внутренних if. Так должно быть
if(n < 3)
{
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
}
else
{
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
Я полагаю, вам не хватает фигурных скобок после if (n < 3), поэтому условное относится только к строке ниже. Затем компилятор нажимает «остальное» ……
Все ваши ответы о фигурных скобках были правильными, но код, который мне был нужен, был такой, ребята:
if (n > 3)
{
cout << answer << " is the " << n;
cout << "th Fibonacci number\n";
}
else
{
if(n == 3)
{
cout << answer << " is the " << n;
cout << "rd Fibonacci number\n";
}
else
{
if(n < 3 && n > 1)
{
cout << answer << " is the " << n;
cout << "nd Fibonacci number\n";
}
else
{
cout << answer << " is the " << n;
cout << "st Fibonacci number\n";
}
}
}