Как сохранить последовательность чисел, размер которых заранее неизвестен в C? - PullRequest
0 голосов
/ 03 октября 2018

Я работаю над программой стандартного отклонения на C и испытываю трудности с предполагаемым вводом.

Я должен принять неизвестное число чисел с плавающей запятой, и я не уверен, как их хранить и распределять память для них.

Пример ввода:

82.5
1000.6699
10
11.11
-45
#

Любойсовет ценится.

Новый пользователь, извините за мелкие ошибки

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы можете выделить массив для хранения ваших значений, и вы можете использовать realloc() для увеличения этого массива.

Поскольку realloc() имеет некоторые накладные расходы, я бы, вероятно, выделил достаточно памяти для, может быть, 16ценности.А когда вы заполните его, измените его размер, чтобы он содержал до 16 дополнительных значений и так далее.Таким образом, ваш код не изменяет размер памяти для каждого значения.

0 голосов
/ 03 октября 2018

На самом деле есть только два пути.Первый - определить struct :

typedef struct {
    int value;
    element* next;
} element;

Затем у вас есть то, что называется связанным списком.Вы можете получить доступ к n-му элементу, просматривая связанные структуры element, и вы знаете, что достигли конца, когда element.next является нулевым указателем (а element->next является SegFault или возвращает бессмыслицу).

Второй способ - это «перестраховаться» и определить массив фиксированной длины, который является максимальным размером, который вам понадобится.Что-то вроде:

int my_array[65535];

Это выгодно, потому что массивы намного быстрее, чем связанные списки (вам не нужно итерировать для доступа к n-му элементу), но если длина массива сильно варьируется, это может выделить гораздо большепамяти, чем необходимо.Вам решать, что вы предпочитаете.

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