#c #variable-length-array
#c #массив переменной длины
Вопрос:
Если я хочу указать 10 элементов, я сканирую how_many
как 10.
Но как только я ввожу третье значение, программа завершает работу и возвращает некоторое длинное отрицательное значение. Я не знаю, в чем проблема.
int main()
{
int how_many,k;
int data[how_many];
printf("Enter the number of values to be sorted..: ");
scanf("%d",amp;how_many);
printf("Enter the values one by one..:n");
for (k=0;k<how_many;k )
{
scanf("%d",amp;data[k]);
printf("data[%d]=%dn",k,data[k]);
}
return 0;
}
Ответ №1:
При определении int data[how_many]
переменная how_many
по-прежнему неинициализирована.
Просто определите массив после получения значения от пользователя, но только в том случае, если сканирование прошло успешно и значение положительное.
int how_many,k;
printf("Enter the number of values to be sorted..: ");
if ( scanf("%d",amp;how_many) amp;amp; how_many > 0 )
{
int data[how_many];
/* ... */
}
Но VLAS (массивы переменной длины) немного опасны: что, если пользователь вставит 2000000000? Вам также придется проверить наличие разумного максимального значения:
#define MAX 1000
/* ... */
if ( scanf("%d",amp;how_many) amp;amp; how_many > 0 amp;amp; how_many <= MAX )
{
int data[how_many];
/* ... */
}
Вот почему VLAS, которые были удалены из стандарта начиная с C11, не являются лучшим выбором в этом сценарии. Я предлагаю просто определить массив статически
int data [MAX];
Или динамически:
int *data = malloc ( MAX * sizeof( int ) );