Блог пользователя unprost

Автор unprost, 14 лет назад, По-русски
Сегодня на контесте задача Б (про контролера) никак не хотела проходить претесты. Во время соревнования не было возможности компилировать локально, поэтому компилировал на ideone.com. А сейчас когда открылись тесты, увидел что претест 1, оказывается не отличается от того что в условии, НО система дает результат



и одновременно этот же код сокмпилированный на ideone.com тоже компилятором gcc дает верный результат -- http://ideone.com/2XFdb

Из-за чего может быть такая разница? Оптимизации? Код в котором результат не определен по стандарту?
  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится -20 Проголосовать: не нравится
эммм... Твое решение вывело что контролер поймал зайца на 9 ходу. Чего непонятного?
Ищи баг
  • 14 лет назад, # ^ |
      Проголосовать: нравится -14 Проголосовать: не нравится
    Возможно что-то забыл проинициализить. Например у меня такой компилятор дома что он всегда все инициализит нулями(если сам не прикажу чем-нить другим). Из-за этого несколько раз нарывался.
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
393264 16.04.2011 0:17:59 LeBron 74B - Электричка GNU C++ Полное решение 30 мс 1400 КБ
Переделал ввод последней строки из фора в
     while (cin>>ch){if (escape==0)break;++pas; - и прошло.
  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо! Замена cin.get() на cin >> ch тоже привела к полному решению. Видимо во входных данных были символы которые cin >> пропускает, а get() - нет. Хотя на ideone ни пробелы ни табуляции не повлияли на результат

    Еще раз спасибо за помощь.
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Интересно.
А кто-нибудь может рассказать, когда для char ch;
ch = cin.get() ;
и
cin >> ch;
дают разный результат?
Может что-то с установкой eof, хотя про такое тоже не слышал. 
UPD. Действительно, cin.get() символ конца строки вводит ('\n'), а cin>>ch - пропускает.

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    cin >> ch; Пропускает пробельные символы, работает по принципу считывания чисел.
    ch = cin.get(); Соответственно наоборот: считывает всё.
    • 14 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      Да, даже пробелы пропускает, что для меня вообще новость.
      Вот что значит нет опыта написания консольных приложений =). Вот когда был ввод из файла с перфокарт, а вывод на АЦПУ (кто еще помнит эту аббревиатуру), тогда все тонкости знал =).