Как определить размер массива на основе количества входов?
Насколько мне известно (я новичок в c), вы можете определить размер массива при условии, что пользователь знает, сколько входных данных собирается предоставить пользователь. Но как я могу определить размер массива на основе количества входов?
Например, если мне нужно ввести 10 чисел в качестве входных данных, то как мне объявить массив таким образом, чтобы его размер был назначен как 10 на основе количества моих входных данных? (я не знаю, возможно ли это, но все же я хочу узнать)
3 ответа
Начиная с C99 вы можете использовать массивы переменной длины. Вы можете объявить их, как вы идете, используя size_t
переменная для его размера.
size_t n;
printf("How many numbers would you like to enter?\n");
scanf("%zu", &n);
int array[n];
for (size_t i = 0 ; i != n ; i++) {
printf("Enter number %zu: ", i+1);
scanf("%d", &array[i]);
}
printf("You entered: ");
for (size_t i = 0 ; i != n ; i++) {
printf("%d ", array[i]);
}
printf("\n");
Demo.
Примечание: этот подход работает для относительно небольших массивов. Если вы планируете использовать большие массивы, не используйте этот подход, потому что это может привести к неопределенному поведению (переполнению области автоматического хранения). Вместо этого используйте malloc
а также free
,
Вы, конечно, можете использовать массивы переменной длины (представленные в C99
), но имейте в виду, в последнем стандарте C11
, это было сделано дополнительной функцией. Последние компиляторы не обязаны поддерживать эту функцию в будущем. Если вы заинтересованы, проверьте этот ответ.
Лучший способ - использовать указатели и функции динамического выделения памяти, такие как malloc()
и семья.
Пример: (псевдокод)
int * p = NULL;
int input = -1;
scanf("%d", &input);
p = malloc(input * sizeof*p);
if (p) { .....
здесь вы можете контролировать размер выделения, используя input
значение переменной.
PS- Указатели, конечно, не являются массивами, но я считаю, что для большинства случаев это послужит цели.
Я думаю, что вы должны перейти к концепции указателей в C . вы можете просмотреть эти видео
При динамическом выделении памяти для 1d-массивов указатели очень удобны.