2012-02-27 5 views
1

Я использую SRand/Rand для создания массива случайных чисел. Размер массива зависит от числа, которое пользователю предлагается ввести. В принципе, если пользователь ставит размер 9, массив должен быть 9 чисел. Затем этот массив должен быть заполнен с помощью параметра rand() с параметром, чтобы сохранить значения массива меньше 18. Проблема заключается в том, что иногда создается массив произвольного размера. Может быть, каждый четвертый или пятый раз, когда я запускаю программу, массив может быть 12-14 чисел. Я не вижу проблемы с моим кодом. Я включил фрагмент ниже. Кто-нибудь пролил на него свет?Исправлен массив фиксированного размера

int main(void) 
{ 
    int N; 
    int i; 

    printf("Please enter a number\n"); 
    scanf("%d", &N); 

    srand (time(NULL)); 
    int numarray[N]; 
    for(i=1; i<numarray[N]; i++) 
    { 
     numarray[i]=rand()%21; 
     printf("%d\n", numarray[i]); 
    } 

    return 0; 
} 
+0

А я вижу! Я так долго смотрел на него, я не видел очевидного! Большое спасибо всем – adohertyd

ответ

5
for(i=1; i<numarray[N]; i++) 

Вы зацикливание за неправильные значения.

  • Массивы начинаются с 0, а не 1.
  • Вы остановки, когда индекс меньше, чем значение numarray[N] (это просто значение в массиве, и не определено в этом случае, так как это один после окончания массива).

Я подозреваю, что вы хотите сделать это:

for(i = 0; i < N; i++) 
4

В этой строке кода:

for(i=1; i<numarray[N]; i++) 

numarray[N] является неинициализированным переменной, поэтому она имеет неизвестное значение. Это может быть ноль, это может быть 60 000.

В результате ваш цикл работает для неизвестного количества итераций.

2

Вы на самом деле имели в виду, что ваш индекс цикла цикла заканчивается на numarray [N] вместо N?

Смежные вопросы