Массив не печатает? - PullRequest
       10

Массив не печатает?

0 голосов
/ 15 октября 2019

Я пытаюсь напечатать массив из 100 чисел в 10 строках и 10 столбцах, каждое число генерируется случайным образом генератором случайных чисел в определенном диапазоне. Однако либо ничего не печатается, либо печатается одно число. Как я могу это исправить?

Я посмотрел несколько примеров печати массивов, но, похоже, код не работает в моей программе. Я также рассмотрел способы заполнения генераторов случайных чисел массивами, однако они также, похоже, не работают.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
    {
        int myRandomNumber, i, a;
        srand(0);
        myRandomNumber = rand();
        double doubarr[10][10];
        for (a = 0; a <100; a++);
            for (i = 0; i<100; i++);
                doubarr[i][a]=(double)(rand()%100+1)/2.0;
        printf("%.2lf ", doubarr[i][a]);    
    }

Я бы хотел, чтобы окончательные результаты выводили 10 строк и 10 столбцов случайным образом. сгенерированные числа в диапазоне, указанном в коде выше. Спасибо!

Ответы [ 3 ]

1 голос
/ 15 октября 2019

printf("%.2lf ", doubarr[i][a]); Это распечатывает одно единственное значение, в частности, значение в местоположении [i][a] в doubarr. Поскольку вокруг ваших циклов for нет фигурных скобок, код печати не выполняется до тех пор, пока они не завершатся, поскольку циклы for без фигурных скобок выполняют только одну строку после них. Чтобы напечатать каждое значение, вам нужно перебрать все значения в массиве.

При этом ваш написанный код не компилируется и не выполняется, а вместо этого будет иметь segfault: doubarr имеет размер 10, 10, и вы пытаетесь назначить его с размерами 0-100, 0-100.

Исправленный код:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
    {
        int myRandomNumber, i, a;
        srand(0);
        myRandomNumber = rand();
        double doubarr[10][10];
        for (a = 0; a <10; a++) {
            for (i = 0; i<10; i++) {
                doubarr[i][a]=(double)(rand()%100+1)/2.0;
                printf("%.2lf ", doubarr[i][a]);
            }
        }    
    }

Демо

1 голос
/ 15 октября 2019

Когда вы изучаете C и используете for, всегда четко обозначайте его скобками:

 for (a = 0; a <10; a++) {
   for (i = 0; i<10; i++) {
     doubarr[i][a]=(double)(rand()%100+1)/2.0;
     printf("%.2lf ", doubarr[i][a]);
   }
 }

Вы завершили каждый цикл for рано с ;, поэтому они по отдельности ничего не делали.

Ваш код эффективен:

 for (a = 0; a <10; a++) { }
 for (i = 0; i<10; i++) { }

 doubarr[i][a]=(double)(rand()%100+1)/2.0;

Где он использовал последнее присвоенное значение a и фактически вытеснил память за пределы массива.

Еще одна хорошая привычка попасть вэто объявить ваши итераторы в самом цикле:

 for (int a = 0; a <100; a++) { ... }
0 голосов
/ 15 октября 2019

Печатается один номер, так как вы вызываете printf () только один раз, и он находится вне обоих циклов. Вам нужно будет переместить его во вложенные циклы for, если вы хотите напечатать каждое значение. Кроме того, ваш размер массива равен [10] [10], но ваш цикл переходит к [100] [100].

...