Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2021, 15:53   #1
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию Заполнение массива с помощью структур в СИ

Здравствуйте! Написал код, который должен заполнять массив числами, а после этого массив вывести на экран. Но на экран выводится какой-то набор чисел вместо элементов массива. Мне, кажется, что я неправильно обращаюсь к элементам массива из структуры struct array_int64 в функции array_int_print, однако компилятор по этому поводу ничего не говорит.

Код:
struct array_int64 {
    int64_t* data;
    size_t size;
};

struct maybe_int64{
    int64_t value;
    bool valid;
};


size_t read_size() { size_t size; scanf("%zu", &size); return size; }

int64_t read_int64() { int64_t a; scanf("%" SCNd64, &a); return a; }


struct array_int64 array_int_read() {
    const size = read_size();
    if (size > 0) {
        int64_t* array = malloc(size * sizeof(size_t));
        for (size_t i = 0; i < size; i++) {
            array[i] = read_int64();
        }
        return (struct array_int64) {.data = array, .size = size};
    }
    else (struct array_int64) {0};
}


void array_int_print( struct array_int64 array ) {
    for(size_t i = 0; i < array.size; i++) {
        printf("%" PRId64, array.data[i]);
    }
}


void array_int_free( struct array_int64 a ) {
    if ( a.size > 0 ) {
        free(a.data);
        a.size = 0;
    }
}


int main()
{
    struct array_int64 a;

    array_int_read();
    array_int_print(a);
    array_int_free(a);


    return 0;
}
Roberttt вне форума Ответить с цитированием
Старый 19.07.2021, 16:32   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
int64_t* array = malloc(size * sizeof(int64_t));
...
else return (struct array_int64) {0};
...
a = array_int_read();
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.07.2021, 16:57   #3
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Спасибо!
Roberttt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение таблицы с помощью запроса SQL Arya Stark SQL, базы данных 1 28.11.2017 21:21
Заполнение listbox значениями из массива. Заполнение массива. Gnaqeaz C# (си шарп) 9 23.10.2014 07:53
Удаление структур из массива структур Infini Помощь студентам 2 02.03.2013 22:31
Заполнение массива структур C++ t2skler Помощь студентам 0 15.12.2011 14:19
Заполнение массива структур данными из файла Brutallus Общие вопросы C/C++ 0 26.11.2009 19:01