Как c ++ assert () может создать бесконечный цикл? - PullRequest
1 голос
/ 02 октября 2010

Судьи-роботы сосут! Я был принят UVA , только после удаления следующих фрагментов кода:

cin >> ntc;
/* extract newline from previous read */
char dummy(0);
cin.get(dummy);
assert( '\n'==dummy );
/* newline extract completes */

Замена на:

cin >> ntc;
getline( cin, inputN ); /* extract remaining '\n' */

Перед заменой почетный робот-судья в UVA вынесет вердикт:

Ваша заявка .... не выполнена с вердиктом Превышен лимит времени .

Ваша программа использовала больше процессорного времени, чем разрешено для этой проблемы. Это означает, что ваш алгоритм недостаточно быстр или что он вошел в бесконечный цикл .

После замены запуск программы занял 0,052 секунды!

  1. Каким образом это может быть связано с замененным кодом?
  2. Есть ли какой-нибудь документ о том, чем робот-эксперт UVA отличается от других компиляторов? Чтобы я знал, какие функции / методы доступны на онлайн-судье.

Я использую MinGW.

1 Ответ

5 голосов
/ 02 октября 2010

Assert не может создать бесконечный цикл.

Я предполагаю, что при срабатывании assert ОС выдает сообщение о своевременной отладке («В программе произошла ошибка ... [Отладка] [Отмена]»). (Извините, я не запускаю Windows в данный момент, поэтому не могу проверить фактическую формулировку). Поскольку никто не нажимал ни одну из кнопок, и процесс не завершался до тех пор, пока кто-то не делал, робот подумал, что программа все еще работает.

Я думаю, что это ошибка в настройке UVA. Отладка точно в срок должна быть отключена.

...