Как решить "ожидаемый"; перед '{' токеном '' в C?

Я создал программу для печати римского эквивалента года, но моя программа показывает ошибку компиляции. Моя программа говорит:

33 4 C: \ Users \ ABC \ Desktop \ cc [Ошибка] ожидается ';' перед знаком "{"

Вот мой код:

#include<stdio.h>
main()
{
    int a,rom;
    printf("Enter the year.");
    scanf("%d",&a);
    rom=reverse(a);
    printf("Roman equivalent of %d is:",a);
}
reverse(int a)
{
    int i,rev=0,rem;
    for(i=a;i>0;i=i/10)
    {
        rem=i%10;
        rev=rev*10+rem;
    }
    roman(a);
}
roman(int a)
{
    int c=0,i,j,k,l,m;
    for(i=a;i>0;i=i/10)
    {
        m=i%10;
        for(j=1;j>0;j--)
        {
            if(c==0)
            {
                printf("m\n");
            }
            elseif(c==1)
            {
                printf("d\n");
                for(l=m-5;l>0;l--)
                    printf("c");
                printf("\n");
            }
            elseif(c==2)
            {
                printf("l\n");
                for(l=m-5;l>0;l--)
                {
                    printf("x");
                }
                printf("\n");
            }
            elseif(c==3)
            {
                printf("v\n");
                for(l=m-5;l>0;l--)
                {
                    printf("i");
                }
                printf("\n");
            }
        }
        c++;
    }
}

4 ответа

Решение

Использование else if вместо elseif,

Вы пропустили место в вашем else if.. это не elseif но else if

Это ошибка опечатки использовать иначе, если вместо else if

#include<stdio.h>
main()
{
    int a,rom;
    printf("Enter the year.");
    scanf("%d",&a);
    rom=reverse(a);
    printf("Roman equivalent of %d is:",a);
}
reverse(int a)
{
    int i,rev=0,rem;
    for(i=a;i>0;i=i/10)
    {
        rem=i%10;
        rev=rev*10+rem;
    }
    roman(a);
}
roman(int a)
{
    int c=0,i,j,k,l,m;
    for(i=a;i>0;i=i/10)
    {
        m=i%10;
        for(j=1;j>0;j--)
        {
            if(c==0)
            {
                printf("m\n");
            }
            else if(c==1)
            {
                printf("d\n");
                for(l=m-5;l>0;l--)
                    printf("c");
                printf("\n");
            }
            else if(c==2)
            {
                printf("l\n");
                for(l=m-5;l>0;l--)
                {
                    printf("x");
                }
                printf("\n");
            }
            else if(c==3)
            {
                printf("v\n");
                for(l=m-5;l>0;l--)
                {
                    printf("i");
                }
                printf("\n");
            }
        }
        c++;
    }
}

Здесь нет elseif в C. Вы должны написать else if (2 отдельных слова).

Но по общему признанию сообщение об ошибке несколько вводит в заблуждение, но на второй взгляд это на самом деле вполне нормально.

Объяснение:

if(c==0)
{
  printf("m\n");
}
elseif(c==1)
{
   ...
}

Компилятор предполагает elseif это имя какой-то функции, принимающей int в качестве аргумента, поэтому он ожидает ; после закрывающей скобки elseif;

Это то, что компилятор думает, что вы хотите:

if (...)           
{
  printf("m\n");     // normal conditional statement
}

elseif(c==1) ;       // call to some function elseif

{                    // unconditional {} block
   ...
}

Если вы скомпилировали со всеми включенными предупреждениями, компилятор выдаст предупреждение, такое как

Неявное объявление функции elseif

Другие вопросы по тегам