Размер массива структуры в C - PullRequest
3 голосов
/ 15 февраля 2020

Я довольно новичок в программировании. Распределение памяти также все еще смущает меня. И наш профессор попросил нас создать массив структур, в которые пользователи будут вводить размер массива. Это значит, сколько записей будут вводить пользователи в телефонный справочник.

Вот так:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct TelDirectory {
    char name[50];
    char address[100];
    char tel[20];
}; 

int main() {
    int num, add, del, prev = 0;
    char ask;
    *//asking for the number of entries*
    printf("Number of entries: ");
    scanf(" %i", &num);

    struct TelDirectory *entry[num];

    Input(entry, prev, num);
    Display(entry, num);

// Ввод и отображение

void Input(struct TelDirectory *entry[], int prev, int num) {
    int i;

    for (i = prev; i < num; i++) {
        entry[i] = (struct TelDirectory *)malloc(sizeof(struct TelDirectory) * num);

        printf("\nEnter name (last, first, middle): ");
        scanf(" %[^\n]", entry[i]->name);

        printf("Enter address: ");
        scanf(" %[^\n]", entry[i]->address);

        printf("Enter telephone number: ");
        scanf(" %[^\n]", entry[i]->tel);    
    }

void Display(struct TelDirectory *entry[], int num) {
    int i, j;
    printf("%i\n", num);
    struct TelDirectory *temp;
    temp = (struct TelDirectory *) malloc(sizeof(struct TelDirectory) * num);
    for (i = 0; i < num; i++) {
        for (j = i+1; j < num; j++) {
            if (strcasecmp(entry[i]->name, entry[j]->name) > 0) {
                temp = entry[i];
                entry[i] = entry[j];
                entry[j] = temp;
            }
        }
    }

    printf("\n\t\t\t\t\tInformation\n");
    printf("------------------------------------------------------------------------------------------------\n");
    printf("Name\t\t\t\t\tAddress\t\t\t\t\tTelephone Number\n");
    printf("------------------------------------------------------------------------------------------------\n");
    for (i = 0; i < num; i++) {
        printf("%-30s\t\t%-30s\t\t%-30s\n", entry[i]->name, entry[i]->address, entry[i]->tel);
    }
    printf("------------------------------------------------------------------------------------------------\n");
}

И мы также будем спрашивать пользователей, обновят ли они каталог, добавив больше записей или удалив записи. Можно ли изменить размер массива структуры во время выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...