Динамический массив символьного типа - трудности - C (СИ)
Формулировка задачи:
Здравствуйте! Во время выполнения задания "Создать структуру <студент> с полями: Студ.код, Фамилия, Предмет, Оценка. Создать динамический массив студентов. Предметов и оценок должно быть несколько. Реализовать вывод информации о студентах".
Собственно, возникла следующая проблема: У меня не получается создать работающий динамический массив типа char для введения названий предметов.
#include<stdio.h> #include<conio.h> struct student{ char code[6]; char surname[25]; char *Subject; int *Mark; }; void EnterStudent(student *Arr, int k); void PrintStudent(student Arr, int k); int main() { int n; printf("Enter the number of students -> "); scanf("%i",&n); student *Arr = new student[n]; int k; printf("enter the number of subjects -> "); scanf("%i",&k); for(int i=0; i<n; i++) { EnterStudent(&Arr[i], k); printf("\n"); } for(int i=0; i<n; i++) PrintStudent(Arr[i], k); getch(); return 0; } void EnterStudent(student *Arr, int k) { getchar(); printf("\nEnter the code -> "); gets(Arr -> code); printf("Enter the Surname -> "); gets(Arr -> surname); printf("Enter Subjects : "); Arr->Subject = new char[k]; //Вот тут и начинаются проблемы for(int i=0; i<k; i++) gets(Arr -> Subject); // Если я пишу Subject[i] , то компилятор ругается следующим образом: // 'gets' : cannot convert parameter 1 from 'char' to 'char *' printf("Enter Marks : "); Arr->Mark = new int[k]; for(int i=0; i<k; i++) scanf("%i",&(Arr -> Mark[i])); } void PrintStudent(student Arr, int k) { printf("\n%s %s\n", Arr.code, Arr.surname); for(int i=0; i<k; i++) printf("%s %i\n", Arr.Subject, Arr.Mark[i]); }
Решение задачи: «Динамический массив символьного типа - трудности»
textual
Листинг программы
... char **Subject; ... Arr->Subject = new char*[k]; ... Arr->Subject[i] = new char[100]; gets(Arr->Subject[i]); ... printf("%s %i\n", Arr.Subject[i], Arr.Mark[i]);
Объяснение кода листинга программы
- Объявляется динамический массив символьного типа
Subject
с помощью указателя на указатель. - Выделяется память под массив указателей на строки с помощью оператора
new
. - Для каждого элемента массива
Subject
выделяется память под строку с помощью оператораnew
. - В каждую строку массива
Subject
записывается значение с помощью функцииgets
. - Выводится на экран значение строки и соответствующий ей числовой индекс с помощью функции
printf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д