'ожидаемое выражение перед 'структурой' 'и 'слишком мало аргументов для функции' ошибки в программе C

struct library{
int id;
int qty;
char name[50];
};

int SearchBookID(const struct library b[],int SearchID,int start,int end)
{

    if(start<end && b[start].id == SearchID)
    {
        printf("%s %d %d",b[start].name,b[start].id,b[start].qty);
        return 1;
    }
    else
    {
        SearchBookID(b,SearchID,end,start++);
    }
}
void main()
{
    int choice;
    char ans;
    int SeID;
    printf("Welcome to the Library.\n");
    do
    {

        printf("Please choose an option:\n");
        printf("1.Insert a book\n");
        printf("2.Delete a book by ID\n");
        printf("3.Search a book by ID\n");
        printf("4.Search a book by name\n");
        printf("5.Display all books (sorted by name)\n");
        printf("6.Display all books (unsorted)\n");
        scanf("%d",&choice);
        switch (choice){
        case 1:
            break;
        case 2:
            break;
        case 3:
            printf("please enter book ID:");
            scanf("%d",&SeID);
            SearchBookID(struct library b[],SeID,0,50);
            break;
        case 4:
            break;
        case 5:
            break;
        case 6:
            break;
        default:
            printf("Invalid Choice. Please try again.\n");
            break;
        }
        printf("do you want to choose another option?(y/n)  ");
        scanf(" %c",&ans);
    }while(ans == 'y');
}

Я продолжаю получать эти две ошибки и не понимаю, почему, особенно ошибку «слишком мало аргументов». Я попытался определить структуру как глобальную переменную с помощью «typedef», но ошибка все еще сохраняется, и когда я добавляю дополнительные аргументы в функцию, она все еще говорит «слишком мало аргументов». Кто угодно может помочь.


person Mohamed Samir    schedule 27.05.2020    source источник
comment
Теперь и в будущем, когда вы публикуете вопрос об ошибке или предупреждающем сообщении, включайте в вопрос всю ошибку или предупреждение.   -  person Fiddling Bits    schedule 27.05.2020
comment
также: опубликуйте полный исходный код, включая заголовки. Кстати: main() должен возвращать int.   -  person wildplasser    schedule 27.05.2020


Ответы (1)


Этот звонок

SearchBookID(struct library b[],SeID,0,50);
             ^^^^^^^^^^^^^^^^^^

это неверно. Вместо предоставления выражения в качестве первого аргумента функции вы написали объявление.

Сравните эту запись с вызовом функции внутри самой функции

SearchBookID(b,SearchID,end,start++);

Обратите внимание, нигде в программе вы не объявляли массив с типом элемента struct library.

person Vlad from Moscow    schedule 27.05.2020
comment
В более общем смысле - при вызове функции и передаче переменной вы не повторяете тип переменной. Просто дайте имя. - person templatetypedef; 27.05.2020