Форум программистов, компьютерный форум CyberForum.ru

Крашит из-за кривого условия, как залатать - C++

Восстановить пароль Регистрация
 
Cavil
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 8
11.10.2012, 04:04     Крашит из-за кривого условия, как залатать #1
Есть простая функция для заполнения двух массивов. Как заполнять -- дано по условию, точнее дано по условию как заполнять b.

C++
1
2
3
4
5
6
7
8
9
10
11
12
void input(int**a, int**b, int n)
{
srand(GetTickCount());
for (int i=0; i<n; i++)
{
    for(int j=0;j<n;j++)
    {
        a[i][j]=1+rand() % 99;
        if (i<=j) {b[i][j]=1/(i+j-1);} else {b[i][j]=1/(i+j+1);}
    }
}
}
Именно на нем и крашит, я конечно понимаю, что на ноль делить нельзя. Но если во внешнем цикле поменять начало счетчика на отличное от нуля, теряются элементы.
C++
1
if (i<=j) {b[i][j]=1/(i+j-1);} else {b[i][j]=1/(i+j+1);}
Как залатать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 04:04     Крашит из-за кривого условия, как залатать
Посмотрите здесь:

Как работают условия в среде Dev-C++? C++
C++ Как считывать с консоли до определённого условия?
Использование указателя AP в main.cpp крашит приложение C++
Как правильно записывать составные условия C++
Как сделать два условия в if? C++
Как выйти из условия if? C++
C++ Как задать два условия для цикла
C++ Пишу консольную змейку, крашит при увеличении размера

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.10.2012, 04:20     Крашит из-за кривого условия, как залатать #2
перед делением проверить что 1/(i+j-1) - это не деление на ноль. если не деление - то оставить тот код, который сечас, если же это деление на ноль, то записать в б какое-то значение

C++
1
2
3
4
5
6
7
8
9
const int chactnoe = i+j-1;
if (chactnoe != 0)
{
   b[i][j] = 1/chactnoe;
}
else
{
   b[i][j] = что-то
}
пишите по нормальному, не в одну строку. в однострочном коде плохо понять, что происходит. вот если еще одну проверку в ту же строку добавить, получится вообже ахтунг а не код.
не экономте на строчках. они помогают быстрее понимать то, что написано. + дебажится в них проще.
Yandex
Объявления
11.10.2012, 04:20     Крашит из-за кривого условия, как залатать
Ответ Создать тему
Опции темы

Текущее время: 14:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru