Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему в Визуал Студио с++ код работает правильно, но вылезает ошибка?

ахахахах ахахахах Мастер (1517), на голосовании 1 неделю назад
Попробуйте его запустить (он заполняет 2мерный массив рандомными числами от 10 до 100):

#include <iostream>
#include <ctime>

using namespace std;

int main() {
setlocale(LC_ALL, "RU");
srand(time(nullptr));

int arr[2][4];

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
arr[i][j] = 10 + rand() % 100;
}
}

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
cout << arr[i][j] << endl;
}
}

return 0;
}
Дополнен 1 месяц назад
кстати, почему он выдаёт также числа, большие 100?
Голосование за лучший ответ
На 20% круче Оракул (86933) 1 месяц назад
Потому что должно быть

for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
Больше 100, потому что ты задал промежуток от 10 до 110
ахахахах ахахахахМастер (1517) 1 месяц назад
так в массивах считается с 0, а не 1
На 20% круче Оракул (86933) Именно. Поэтому у тебя массив на 2 строки, а заполняешь ты 3.
Беспрекословный Эксперт Мыслитель (5795) 1 месяц назад
Ошибка в вашем коде возникает из-за выхода за пределы массива. В объявлении int arr[2][4]; указано, что массив содержит 2 строки и 4 столбца, но в циклах вы используете индексы до 3 и 5 соответственно:
 for (int i = 0; i < 3; i++) { // Здесь должно быть i < 2 
for (int j = 0; j < 5; j++) { // И здесь должно быть j < 4
// ...
Кроме того, выдача чисел больше 100 происходит из-за ошибки в расчете случайного числа. Выражение 10 + rand() % 100 может выдать число до 109, потому что % 100 дает числа от 0 до 99, а затем вы прибавляете 10. Для генерации чисел от 10 до 100 вам нужно использовать rand() % 91 + 10, чтобы получить числа от 0 до 90 и после прибавления 10 получить диапазон от 10 до 100.

Исправленный вариант кода:
 #include   
#include

using namespace std;

int main() {
setlocale(LC_ALL, "RU");
srand(time(nullptr));

int arr[2][4];

for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j] = rand() % 91 + 10; // Исправлено здесь
}
}

for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << arr[i][j] << endl;
}
}

return 0;
}
После этих исправлений программа должна работать корректно, не выходить за пределы массива и генерировать числа в заданном диапазоне от 10 до 100.
ахахахах ахахахахМастер (1517) 1 месяц назад
от души
Похожие вопросы