#c #arrays #loops
#c #массивы #петли
Вопрос:
При выполнении приведенного ниже простого кода я хочу проверить размер моего массива с помощью инструкции printf для вывода значения size . Я считаю, что я правильно закодировал это, но вывод полностью пустой.
До сих пор мне удавалось заставить это работать только при чтении из файла. Я также попробовал инициализировать size=0, что, как я уже знал, не сработает. Запускал код только на кодовых блоках.
int main()
{
int x[50]= {1,3,43,5,7,49,3,6},i,size;
for(i=0;i<50;i )
{
scanf("%d",amp;x[i]);
size;
}
printf("The size is %d", size);
return 0;
}
Этот код должен просто выводить «Размер равен 8».
Комментарии:
1. Инициализировать
size
0
. Обратите внимание, что вы можете использоватьi
вместо этого.2. ваше значение размера неинициализировано. C не инициализирует значения
0
… итак, перед циклом,size=0
… Также ваш код НЕ будет выводить size = 8, потому что ваш цикл for будет продолжать выполняться, покаi < 50
вы добавляете size. Если вы хотите выйти, когда в конце ввода вам нуженif
оператор для проверки этого условия, и abreak
всякий раз, когда это условие выполняется.3. У меня создается впечатление, что, по вашему мнению
scanf()
, это как-то связано с вашим списком инициализаторов. Это не4. Список инициализации обрабатывается так, как если бы он содержал
0
после всех определенных элементов, поэтому вы можете перебирать массив, пока не дойдете до0
. Однако это не сработает, если какая-либо из инициализаций выполняется явно0
.5. Вы также можете изменить
[50]
на[]
, а затем использоватьsizeof x / sizeof *x
для получения количества элементов массива.
Ответ №1:
Как вы можете ожидать, что ваш вывод будет отображаться как 8.
поскольку вы уже инициализировали значение массива равным 50, вы получите размер массива 50.
Комментарии:
1. Ну, я хотел закодировать это так, как если бы я не знал, сколько элементов на самом деле в массиве …. .. вроде как при использовании fscanf для чтения массива с неизвестным количеством действительных чисел в массиве. Не был слишком уверен, что это хороший способ для этого
2. я бы рекомендовал использовать fgets поверх scanf, если вы выделите небольшое пространство здесь или там, будет сложно определить, что пошло не так.