Динамические структуры данных. Ошибки в функциях - C (СИ)
Формулировка задачи:
Как я понял я запутался в указателях на типы данных при объявлении, или вызове функции. Помогите разобраться, всю голову сломал...
Вот текст программы.
#include <string.h> #include <stdlib.h> #include <stdio.h> struct Note { char last_name[15]; char first_name[15]; int no; int data[3]; }; void *Fill(int count); void Print(float *box, int count); int main(void) { int count; printf ("Enter Size = "); scanf ("%d", &count); float *box = Fill(count); Print(box, count); system("PAUSE"); free(box); } void *Fill(int count) { int i; struct Note* box = (struct Note*)malloc(sizeof(struct Note) * count); //struct Note tmp; for(i=0; i<count; i++) { printf("\n----------------"); puts("\nEnter last and first name"); scanf("%s %s", box[i].last_name, box[i].first_name); puts("\nEnter number phone"); scanf("%d", &box[i].no); puts("\nEnter DOB (form:d.m.y)(3)"); scanf("%d %d %d", &box[i].data[0], &box[i].data[1], &box[i].data[2]); } return box; } void Print(float *box, int count) { int i; printf("\n----------------"); printf("\nSort!"); for(i=0; i<count; i++) { printf("\n----------------"); printf("\nName: %s %s\n", box[i].last_name, box[i].first_name); printf("Phone: %d\n", box[i].no); printf("Day:%d Month:%d Year:%d", &box[i].data[0], &box[i].data[1], &box[i].data[2]); printf("\n"); } }
Решение задачи: «Динамические структуры данных. Ошибки в функциях»
textual
Листинг программы
#include <string.h> #include <stdlib.h> #include <stdio.h> struct Note { char last_name[15]; char first_name[15]; int no; int data[3]; }; struct Note *Fill(int); void Print(struct Note*, int); int main(void) { int count; printf("Enter Size = "); scanf("%d", &count); struct Note *box = Fill(count); Print(box, count); system("PAUSE"); free(box); } struct Note *Fill(int count) { int i; struct Note* box = malloc(sizeof(struct Note) * count); //struct Note tmp; for (i = 0; i<count; i++) { printf("\n----------------"); puts("\nEnter last and first name"); scanf("%s %s", &box[i].last_name, &box[i].first_name); puts("\nEnter number phone"); scanf("%d", &box[i].no); puts("\nEnter DOB (form:d.m.y)(3)"); scanf("%d %d %d", &box[i].data[0], &box[i].data[1], &box[i].data[2]); } return box; } void Print(struct Note *box, int count) { int i; printf("\n----------------"); printf("\nSort!"); for (i = 0; i<count; i++) { printf("\n----------------"); printf("\nName: %s %s\n", box[i].last_name, box[i].first_name); printf("Phone: %d\n", box[i].no); printf("Day:%d Month:%d Year:%d", box[i].data[0], box[i].data[1], box[i].data[2]); printf("\n"); } }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
для работы со строками, для работы с памятью и для работы с вводом/выводом данных. - Объявляется структура данных
Note
с полями: last_name (последняя фамилия) и first_name (имя) типа char (строка до 15 символов), а также поле no типа int (целое число) и массив data типа int на 3 элемента. - В функции main() пользователю предлагается ввести размер массива.
- После ввода размера, функция Fill() вызывается для заполнения массива структурными данными.
- Для каждого элемента массива выводится приглашение для ввода данных.
- После ввода всех данных, функция Print() вызывается для вывода данных на экран в отсортированном виде.
- В конце программы вызывается функция system(
PAUSE
) для приостановки выполнения программы до нажатия клавишиВвод
. - После этого, выделенная память освобождается с помощью функции free().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д