Динамические структуры данных. Ошибки в функциях - 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().