Мне нравится, когда объекты "назначаются" одной функции.В вашей программе ваши значения создаются в функции getdata()
, используются в calculations()
и никогда не выпускаются.
Если бы за них отвечала функция main()
, это, на мой взгляд, упростило бы кодирование,Что-то вроде
int main(void) {
int inputnum, innum;
double *fPtr;
printf("How many values do you want to input into the array?");
fflush(stdout);
if (scanf("%d", &inputnum) != 1) {
fprintf(stderr, "Error in input. Program aborted.\n");
exit(EXIT_FAILURE);
}
if (inputnum > MAX) { /* ... nothing yet ... */ }
fPtr = calloc(inputnum, sizeof *fPtr);
if (fPtr == NULL) {
fprintf(stderr, "Not enough memory. Program aborted.\n");
exit(EXIT_FAILURE);
}
/* use fPtr in other functions */
innum = data_get(fPtr, inputnum);
data_print(fPtr, innum);
free(fPtr);
return 0;
}
В приведенном выше фрагменте я использовал функции data_get()
и data_print()
с несколько другим прототипом, чем у вас.Эти функции принимают указатель и несколько элементов.
int data_get(double *data, int num);
void data_print(double *data, int num);
Первая читает до num
, удваивается в памяти, на которую указывает data
, и возвращает количество двойных, которые были эффективно введены.
Для печати второго числа требуется двойное число.
О!Если у вас нет веских причин использовать float
s, не используйте их.Всегда предпочитаю double
с.