Динамические структуры данных. Ошибки в функциях - 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().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д