Вам нужно сделать поле courses
массивом указателей на char
. Кроме того, courseDetails
должен быть массивом:
#include <stdio.h>
#include <stdlib.h>
#define STD_NAME_SIZE 81
#define COURSE_SIZE 3
#define COURSE_NAME_SIZE 81
#define COURSE_CODE_SIZE 81
#define COURSE_ACRONYM_SIZE 81
typedef struct {
int std_id;
char std_name[STD_NAME_SIZE];
double gpa;
char *courses[COURSE_SIZE]; // Make this an array of pointers
} student_t;
typedef struct{
int course_id;
char course_name[COURSE_NAME_SIZE];
char course_code[COURSE_CODE_SIZE];
char course_acronym[COURSE_ACRONYM_SIZE];
int quota;
} course_t;
int main(void)
{
student_t studentProfile;
course_t courseDetails[COURSE_SIZE];
for (int i = 0; i < COURSE_SIZE; i++){
printf("Enter course name: ");
scanf("%s", courseDetails[i].course_name);
studentProfile.courses[i] = courseDetails[i].course_name;
}
printf("\n");
for (int j = 0; j < COURSE_SIZE; j++){
printf("Your %d course is: %s\n", j + 1, studentProfile.courses[j]);
}
return 0;
}
Составлено с
gcc -Wall -Werror -o scratch scratch.c
Пример ввода и вывода
Enter course name: first
Enter course name: second
Enter course name: third
Your 1 course is: first
Your 2 course is: second
Your 3 course is: third
Примечание
Этот подход очень хрупкий, поскольку строковые указатели в studentProfile
указывают на строки, хранящиеся в других переменных. Я понимаю, что это игрушечная программа, которая является частью какой-то домашней программы. Тем не менее, я просто хочу предостеречь любого от использования этого кода в производственной среде. В реальной программе вы, вероятно, просто сохранили бы массив course_id
значений в student_t
. Чтобы получить название курса, вы сначала найдете course_t
с соответствующим course_id
, а затем отобразите course_name
.