Как напечатать структуру массива в другой функции в C - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу создать функцию для печати всей даты в массиве struct после того, как пользователь нажмет определенную клавишу (в данном случае 1) и остановит цикл, а если он нажмет 2, цикл продолжится, пока массив не заполнится или пользователь не нажмет 1

#include <stdio.h>
#include <string.h >
struct dat {
    int age;
    char name[50];
    int score;
    int trab[2];
};

int main(void)
{
    int x = 0;
    struct dat people[20];
    for(int i = 0; i < 20; i++)
    {
        gets(people[i].name);
        scanf("%d", &people[i]age);
        scanf("%d", &people[i].score );
        scanf("%d", &people[i].trab[0]);
        scanf("%d", &people[i].trab[1]);
        scanf("%d", x);
        switch(x)
        {
            case 1:
                break;
            case 2:
                continue;
        }
    }
    imp(people[i]);
    return 0;
}

int imp(struct dat people[i])
{   
    int i;

    printf("%s", people[0].name);
    printf("%d", &people[0].age);
    printf("%d", &people[0].score );
    printf("%d", &people[0].trab[0]);
    printf("%d", &people[0].trab[1]);

    return 0;
}

1 Ответ

0 голосов
/ 17 декабря 2018

Ваш код не может скомпилировать в этом состоянии.

Ваш компилятор должен сообщить вам, почему некоторые строки не компилируются, сначала попытайтесь исправить ошибки.

После исправления ошибок включите предупреждение компилятораи обработайте их.


Строка

#include <string.h >

вызовет эту ошибку: fatal error: string.h : No such file or directory

Почему пробел между h и >?


Не следует использовать функцию gets: с человек получает

Никогда не использовать get ().Поскольку невозможно заранее знать, не зная данных, сколько символов будет считывать get (), а поскольку gets () будет продолжать хранить символы после конца буфера, использовать его крайне опасно.Он был использован для взлома компьютерной безопасности.Вместо этого используйте fgets ().

Получается (people [i] .name);

должно быть

fgets(stdin, people[i].name, sizeof people[i].name);

В следующей строке отсутствует точка .

scanf("%d", &people[i]age);

Поскольку x равно 0, на следующей строке разыменовывается указатель NULL (который вам не нужен):

scanf("%d", x);

Вы должны написать:

scanf("%d", &x);

Затем вы вызываете функцию imp для people[i], но imp не объявлено, и я не определен (это переменная, локальная для цикла for)

imp(people[i]);

Недопустимое определение imp:

int imp(struct dat people[i])

Должно быть что-то вроде:

/* function to display ONE person */
int imp(struct dat people)

или

/* function to display ALL peopel */
int imp(struct dat *people, int number_of_people)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...