Как исправить пустой вывод при печати размера массива

#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 оператор для проверки этого условия, и a break всякий раз, когда это условие выполняется.

3. У меня создается впечатление, что, по вашему мнению scanf() , это как-то связано с вашим списком инициализаторов. Это не

4. Список инициализации обрабатывается так, как если бы он содержал 0 после всех определенных элементов, поэтому вы можете перебирать массив, пока не дойдете до 0 . Однако это не сработает, если какая-либо из инициализаций выполняется явно 0 .

5. Вы также можете изменить [50] на [] , а затем использовать sizeof x / sizeof *x для получения количества элементов массива.

Ответ №1:

Как вы можете ожидать, что ваш вывод будет отображаться как 8.

поскольку вы уже инициализировали значение массива равным 50, вы получите размер массива 50.

Комментарии:

1. Ну, я хотел закодировать это так, как если бы я не знал, сколько элементов на самом деле в массиве …. .. вроде как при использовании fscanf для чтения массива с неизвестным количеством действительных чисел в массиве. Не был слишком уверен, что это хороший способ для этого

2. я бы рекомендовал использовать fgets поверх scanf, если вы выделите небольшое пространство здесь или там, будет сложно определить, что пошло не так.