Не знаю, как вызвать функцию - PullRequest
0 голосов
/ 01 мая 2019

Я пишу функцию поиска в C, которая использует указатели и структуры. Поиск возможен по имени, используя массив с именем contatcs с десятью записями. Массив уже инициализирован и заполнен и работает как задумано.

Я пытался решить проблему путем реструктуризации своего кода, но это только усугубляло ситуацию. Возможно, в логике проектирования есть какой-то недостаток, который я не могу найти.

typedef struct
{
    char streetname[150];
    char city[50];
    int zipcode;
}address;

typedef struct
{
    char name[50];
    int age;
    address homeaddress;
}person;

int search (char* name, person *contacts, int size);

[...] // initialization and population of array omitted

int search (char *name, person *contacts, int size)
{
    int i;
    printf("Input name: ");
    char userin = scanf("%s", name);

    for(i = 0; i < size; i++)
    {
        if (strcmp(contacts[i].name, &userin) == 0)
        {
            printf("Name: %s;", contacts[i].name);
            printf(" Age: %d;", contacts[i].age);
            printf(" Adress: %s, ", contacts[i].homeaddress.streetname);
            printf("%s, ", contacts[i].homeaddress.city);
            printf("%d\n", contacts[i].homeaddress.zipcode);
        }
    }
    return 0;
}

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

1 Ответ

4 голосов
/ 01 мая 2019
char userin = scanf("%s", name);

    for(i = 0; i < size; i++)
    {
        if (strcmp(contacts[i].name, &userin) == 0)

Нельзя использовать strcmp с char, userin должен быть массивом с нулевым символом в конце char s

И, как указал @JohnBollinger в комментариях, кажется, вы хотите сравнить name, а не результат scanf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...