Откуда берется это значение массива?

#c #arrays #random

#c #массивы #Случайный

Вопрос:

Итак, я практикую кодирование перед началом занятий снова, и я хотел создать случайный массив из 10 целых чисел и хотел найти, какие два числа при сложении вместе равны больше 100.

Когда я запускаю приведенный ниже код

 int arr[9];

for(int i = 0; i<=9; i  ){
    arr[i]=(rand()%100) 1;
    cout<<arr[i]<<endl;
}

cout<<endl;

for(int k = 0; k<=9; k  ){
    for (int j = k 1; j<=9; j  ){
        if((arr[k] arr[j])>100){
            cout<<arr[k]<<"   "<<arr[j]<<" "<<"over 100"<<endl;
        }
        else{
            cout<<arr[k]<<"   "<<arr[j]<<" "<<"under 100"<<endl;
        }
    }
}


return 0;
  

Я замечаю, что значение arr [9] равно одному числу, но в программе для него есть другое число.
Например: созданный массив является
[42 68 35 1 70 25 79 59 63 65]

но мой вывод показывает 9 как arr [9]

42 68 больше 100

42 35 меньше 100

42 1 меньше 100

42 70 на 100

42 25 меньше 100

42 79 из 100

42 59 больше 100

42 63 больше 100

42 9 меньше 100

(Я просто включу первый цикл, чтобы больше этого не делать)

Куда делись мои 65??

Откуда взялось 9??

Я написал что-то не так??

Спасибо

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

1. for(int i = 0; i<=9; i ) Это слишком много для одной итерации. Массив содержит только 9 элементов.

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

Ответ №1:

Я замечаю, что значение arr [9] равно одному числу, но в программе для него есть другое число.

Подсчет в компьютерах начинается с 0 и заканчивается на одно число меньше общего размера. Для int arr[9]

  • девятый индекс равен arr[8]
  • первый индекс равен arr[0]
  • второй индекс равен arr[1]

Когда вы это делаете arr[9] , вы пересекаете границу (доступ к элементу, которого нет в диапазоне), что приводит к неопределенному поведению.

В результате ваш цикл должен остановиться на i < 9 :

 for(int i = 0; i < 9; i  ) // i < 9 now vs i <=9
  

Те же изменения необходимо o внести в циклы под первым.