Получение ошибки времени выполнения в C в spoj toandfro classic

Вот ссылка на проблему. http://www.spoj.com/problems/TOANDFRO/ А вот ссылка на мой код http://ideone.com/w5wafl В кодовой панели он говорит об исключении с плавающей запятой. Вот ссылка на кодовую панель http://codepad.org/FW9bKp5k (уберите пробел bw code--pad) почему это дает ошибку времени выполнения. это из-за ошибки в строках или массиве. Я помещаю код здесь.

#include <stdio.h>
#include <string.h>

int main(void) 
{
    int width_of_array, length_of_array, i,j , k;
    k = 0;
    char input_array[300], answer[300][300];

    scanf("%d", &width_of_array);
    scanf("%s", input_array);

    length_of_array = strlen(input_array) / width_of_array;
    for (i = 0 ; i < length_of_array ; i++)
     {
        if (i % 2 == 0)
         {  
            for ( j = 0 ; j < width_of_array ; j++)
              {
                answer[i][j] = input_array[k++];
              }
         }
        else
         {
            for (j = width_of_array - 1 ; j >= 0 ; j--)
              {
                answer[i][j] = input_array[k++];
              }
         }
    }
    for (j = 0 ; j < width_of_array ; j++)
     {
        for (i = 0 ; i < length_of_array ; i++)
         {
            printf("%c", answer[i][j]);
         }
     }
    return 0;
}

person Vishal_ranjan    schedule 19.12.2015    source источник
comment
Вы никогда не проверяете возвращаемое значение scanf(), значение width_of_array может быть 0 или что-то в этом роде, узнать это невозможно, пока вы не подтвердите, что scanf() вернуло 1.   -  person Iharob Al Asimi    schedule 19.12.2015
comment
В любом из ваших тестов вы не даете никаких входных данных и ожидаете вывода. Как это даст вам правильный результат без проводного поведения?   -  person ameyCU    schedule 19.12.2015
comment
@iharob Извини. Моя вина. Чувствую себя идиотом сейчас. я немного новичок в соревновательном программировании. Надо было проверить раньше.   -  person Vishal_ranjan    schedule 19.12.2015
comment
В любом случае, спасибо большое. Это сработало.   -  person Vishal_ranjan    schedule 19.12.2015
comment
@ameyCU спасибо за объяснение. Теперь это работает.   -  person Vishal_ranjan    schedule 19.12.2015
comment
kodemonk.com/toandfro-to-and-fro   -  person codeomnitrix    schedule 12.06.2016


Ответы (1)


Строка length_of_array = strlen(input_array) / width_of_array; будет делением на ноль, если пользователь введет ноль в качестве ширины массива. CodePad помечает это как ошибку с плавающей запятой, но во время выполнения это приводит к неопределенному поведению.

person Dylan Kirkby    schedule 19.12.2015
comment
Спасибо, что указали. Это была бы другая возможность, но было упомянуто, что значения больше нуля, так что это не проблема. В любом случае, спасибо!! - person Vishal_ranjan; 20.12.2015