Как заполнить значения в структуре с помощью функции? - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу вызвать функцию для заполнения значений структуры в C. У меня есть следующий код, но я получаю ошибки, такие как [Error] request for member 'id' in something not a structure or union.

#include <stdio.h> 

typedef struct {
    int       id;
    float    grades[3];
} student_t;

void scan_student (student_t *s) {
    printf("Please give student's info:\n");
    scanf("%d%f%f%f", s.id, s.grades[0], s.grades[1], s.grades[2]);
}

int main () 
{ 
    student_t stu2;

    scan_student(&stu2);

    printf("Student's info are:\n");
    printf("%6d %5.2f %5.2f %5.2f\n", stu2.id, stu2.grades[0], stu2.grades[1], stu2.grades[2]);

    return 0; 
} 

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Я также публикую пример без использования указателей:

#include <stdio.h> 

typedef struct {
    int       id;
    float    grades[3];
} student_t;

student_t scan_student () {
    student_t s;
    printf("Please give patient's info:\n");
    scanf("%d%f%f%f", &s.id, &s.grades[0], &s.grades[1], &s.grades[2]);
    return s;
}

int main () 
{ 
    student_t stu2;

    stu2= scan_student();

    printf("Student's info are:\n");
    printf("%6d %5.2f %5.2f %5.2f\n", stu2.id, stu2.grades[0], stu2.grades[1], stu2.grades[2]);

    return 0; 
} 
0 голосов
/ 15 ноября 2018

s - это указатель, а не структура.Это означает, что вы не можете использовать . для него.

Вместо этого вы должны написать (*s).id (разыменование, затем получить доступ к элементу структуры) или s->id (то же самое, но короче).

Кроме того, scanf %d принимает указатель, поэтому должно быть &s->id и т. Д.

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