- 1
- 2
- 3
char line[10];
cout<<"Press any key to exit"<<endl;
cin.getline(line,9);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+151
char line[10];
cout<<"Press any key to exit"<<endl;
cin.getline(line,9);
Очередной перл из решений кандидатских задач.
Видимо в военное время количество символов, генерируемых одной клавишей, может достигать 9. :)
Мистер Хэнки 09.09.2010 20:07 # −3
Потому что getline читает не 1-н символ, а их последовательность. вроде тут всё корректно.
Lexey 09.09.2010 20:10 # +1
TheCalligrapher 10.09.2010 00:09 # +2
`basic_istream<>::getline` завершает ввод при выполнении одного из трех условий:
1) возникло условие "конец файла" (в потоке выставляется `eofbit`)
2) прочитан символ окончания ввода (в данном случае - '\n'),
3) прочитано n-1 символов (в потоке выставляется `failbit`)
В том, что данный код - говнокод сомневаться, разумеется, не приходится. Возможно "аффтар" понимал, что пользователь будет недоуменно нажимать, скажем, пробел и, чтобы пользователь не мучался до второго пришествия, ограничил длину ввода 8 символами. Т.е. если пользователь не догадался сразу нажать именно на Enter, то его мучения с разнообразными any key закончатся после 8-ми нажатий.
Тем не менее умиляет использования размера 9. Если уж буфер выбран размера 10, то именно 10 надо было и передавать в `getline` (`sizeof line` например). Хотя, конечно, бессмысленно рассуждать о размере тогда, когда сам подход крив донельзя.
inkanus-gray 10.09.2010 00:48 # 0
Анонимус 10.09.2010 01:32 # +3
inkanus-gray 10.09.2010 01:42 # 0
В Викицитатнике есть цитата: http://ru.wikiquote.org/wiki/Лец
Но нет ссылки на произведение.
inkanus-gray 10.09.2010 01:57 # 0
http://tinyurl.com/35o4uwc
Однако, из русского раздела Википедии статья о нём удалена.
nil 10.09.2010 08:39 # +2
Lexey 10.09.2010 11:47 # +2
Нет, видимо все-таки в курсе.
1) тут мимо кассы, ибо ввод идет с клавиатуры.
2) Именно этот вариант тут дает то, что задумывалось - завершение программы.
3) Это все замечательно, только этого не произойдет пока не встретиться \n или конец файла. Так что практической пользы от этого уточнения в данном случае - 0.
>Возможно "аффтар" понимал, что пользователь будет недоуменно нажимать, скажем, пробел и, чтобы пользователь не мучался до второго пришествия, ограничил длину ввода 8 символами. Т.е. если пользователь не догадался сразу нажать именно на Enter, то его мучения с разнообразными any key закончатся после 8-ми нажатий.
Юзер может хоть до посинения жать пробел. Ничего не будет, пока он не нажмет Enter.
TheCalligrapher 10.09.2010 17:20 # 0
Lexey 10.09.2010 17:39 # 0
TheCalligrapher 10.09.2010 19:34 # +3
Lexey 10.09.2010 19:58 # 0
bugmenot 10.09.2010 00:13 # +2
inkanus-gray 10.09.2010 00:44 # +5
ZX_Spectrum 10.09.2010 03:02 # +3
istem 10.09.2010 11:56 # +2
--
спец предложение от "logitech"
ZX_Spectrum 10.09.2010 12:17 # 0
istem 10.09.2010 12:21 # −1
ZX_Spectrum 10.09.2010 12:26 # +6
http://www.getdigital.de/images/actionshots/t4/AnyKey_Morse.JPG
istem 10.09.2010 12:28 # −1
nil 11.09.2010 10:15 # 0
inkanus-gray 10.09.2010 14:49 # 0
А на русский почему-то перевели только на ЕС-1840.
Анонимус 10.09.2010 14:55 # −1
Кстати лучшая рассовая немецкая клава у меня:
http://www.daskeyboard.com/model-s-ultimate/
bugmenot 10.09.2010 17:37 # −1
Анонимус 10.09.2010 17:41 # 0
А в современных мамах иногда уже даже i8042-то нет... И даже его эмуляция в USB стала необязательной
bugmenot 10.09.2010 17:57 # −1
кстати, их даже вроде бы сейчас по лицензии кто-то делает
"Unicomp has had difficulty making them profitable because they rarely break" (педивикия)
Анонимус 10.09.2010 18:14 # 0
спасибо за наводку.
nil 11.09.2010 10:18 # 0
Вопрос немного не в тему, а на клавиши Вы что-то наклеили или так оставили?:)
Анонимус 11.09.2010 13:26 # 0
конечно, так оставил) довольно редко промахиваюсь)
а как она стучит....
nil 26.02.2011 15:37 # 0
TarasB 10.09.2010 16:32 # 0
http://www.gamedev.ru/files/images/dsc00002.jpg
bugmenot 10.09.2010 17:38 # −1
ZX_Spectrum 11.09.2010 02:21 # +3
а то у всех секретарш и прочих чайников кроме вопроса "А где Any Key?" появились бы вопросы типа "А где Esc?", "А где Home?", "А где Insert?", "А где Caps Lock?"...
кроме того, перевод был бы ужасным, как обычно.
inkanus-gray 11.09.2010 02:24 # 0
Ведь у них «Entfernen» и «Annulaire» соответственно.
nil 10.09.2010 08:42 # +5
В военное время могут трястись руки и получаться дребезг.
На клавиатуру может упасть бездыханное тело (или еще-не-бездыханное тело будет нажимать кнопки головой).
А размер буфера отражает серьезность намерений — человек действительно хочет нажать кнопку:)
bugmenot 10.09.2010 18:43 # −1
J0hnny 10.09.2010 19:27 # 0
Или где-то не работает?
Или может это не обязательно stdin? Вот только когда общение идёт с пользователем, KeyPressed должно хватить
bugmenot 10.09.2010 19:58 # +1
я сказал:
> кроссплатформенной
а школьным курсом Turbo Pascal 7.0 ты блеснул,
передаст неочищенный буфер клавиатуры родителю. Самый смак будет, если глупый юзер вместо any key жмакнул ↵, а родитель - NC или любая другая оболочка, которая по ↵ запускает прогу еще раз :-D
inkanus-gray 10.09.2010 21:04 # −1
Модуль Crt — УГ редкостное. KeyPressed не реагирует на F11, F12 и ещё на кучу символов, а ReadKey для некоторых клавишей нужно вызывать два раза. Проще написать свои функции, чем подстраиваться под Crt. Не потому ли у него куча альтернатив?
Я делал так:
Естественно, для виндовой версии этот код придётся переписывать.
J0hnny 10.09.2010 23:02 # +1
ну да, как и документации
http://www.freepascal.org/docs-html/rtl/crt/readkey.html
Было бы хуже если бы этого не было написано.
>Я делал так
Вроде freepascal обсуждаем, а не то как кто-то когда то делал под TP
inkanus-gray 10.09.2010 23:06 # 0
bugmenot 10.09.2010 23:50 # −1
я залез в Джордейна, а у него прямо эта техника и описана
насчет ReadKey и расширенных клавиш у меня к Crt нареканий нет (если вернула #0 - изволь прочитать скан-код), а вот, помнится там был замечательный busy-loop для того, чтобы высчитать, сколько итераций можно сделать между прерываниями времени суток (калибровка для Delay) результат хранился в слове и на быстрых процах линковка с Crt автоматически означала падение с divide by zero. Вот это да, сильно. И оф. патча не было. К счастью, сырцы RTL прилагались.
J0hnny 11.09.2010 00:00 # +1
К чему это? речь шла про кроссплатформеность
> divide by zero
это по-моему error 200, или 220 уже не помню.
Но вроде была небольшая программка, patchpas.com по-моему, она могла пропатчить уже готовый exe, на тот случай, если исходников нет..
>в мире freepascal такая хрень часто встречается, потому что процедура ждать строки из stdin - стандартная, а ждать любой кнопки - кроссплатформенной функции нет
Так что, есть?
bugmenot 11.09.2010 01:41 # −2
Видимо, здесь обсуждают решение для DOS/Realmode
> вроде была небольшая программка, patchpas.com по-моему,
> она могла пропатчить уже готовый exe
Даа, линковать кривую RTL и потом патчить исполняемый модуль - это годное, системное решение
Лично мне попалась не такая уж небольшая и вдобавок потребовала DOS4GW
Кстати, из описания бага следует, что патч RTL увеличивает размер кода, и утилита для пост-обработки бинарей должна быть либо очень умной, либо должна изговнякать код от которого зависит Delay
на какие платформы Crt.KeyPressed, Crt.ReadKey не портировали предлагаю найти самостоятельно, ОК? (без подвоха, такие есть)
J0hnny 11.09.2010 02:07 # −2
>Даа, линковать кривую RTL и потом патчить исполняемый модуль - это годное, системное решение
"А ещё тролопотамусы прикидываются кактусами, отвечая на высказывания выкидывая из них значимые части, например:"
>>она могла пропатчить уже готовый exe, на тот случай, если исходников нет
>не портировали предлагаю найти самостоятельно, ОК?
Мне это не надо.
>а ждать любой кнопки - кроссплатформенной функции нет
Я показал, что всё таки есть, если хочешь оспорить и показать что на некоторых платформах не реализовано - ищи сам.
bugmenot 11.09.2010 02:26 # −2
> > а ждать любой кнопки - кроссплатформенной функции нет
> Я показал, что всё таки есть
Ну-ка, ну-ка, посмотрим
ищи слово caveats и читай вокруг
это был совет
J0hnny 11.09.2010 02:40 # 0
>Если уж настолько важен бинарь от проебанных исходников, есть решения по-приличнее.
Ну да, ты наверное относишься к клану программистов, которые никогда не используют чужие программы - ездят исключительно на своих велосипедах.
bugmenot 11.09.2010 09:04 # −2
* собрал седьмым турбопаскалем под DOS
* за 15 лет вообще свое творение не трогал
* не отдал сырцы при этом
Я тя научу, что делать. В третий день новой луны, семижды перекрестясь, подходишь к ларьку, берешь два пива и тюбик кольдкрема. Потом идешь к автору и обратив ягодицы к востоку и произносишь след. заговор: «чуваак! твоя тулза на моем проце падает! пересобери её virtual pascal`ем!»
J0hnny 11.09.2010 15:02 # 0
>>она могла пропатчить
>* за 15 лет вообще свое творение не трогал
я не говорил того, что пользуюсь ей по сей день
bugmenot 11.09.2010 17:28 # −2
J0hnny 11.09.2010 18:13 # −2
-"Мы продолжаем наш цикл передач про тролопотамусов. Тролопотамусы, в силу своих пристрастий любят затягивать дискуссии, коверкая высказывания участников дискуссии. Но тем не менее, если дискуссия складывается не в их пользу, выставляя их дураками, их ограниченные умственные способности не дают им осознать того, что они виновники, как они это называют "сантабарбары" "
bugmenot 11.09.2010 18:21 # +1
kaktus 07.05.2015 22:17 # 0
Как, как Вы меня назвали?
kegdan 07.05.2015 22:29 # +1
kaktus 07.05.2015 22:40 # 0
1024-- 07.05.2015 22:56 # +1
kaktus 07.05.2015 22:58 # 0
P.S. А что с Царём?
1024-- 07.05.2015 23:13 # 0
kaktus 07.05.2015 23:45 # 0
https://gist.github.com/superhackkiller1997
Дальше... Пока не вижу... Ждите...
kegdan 08.05.2015 02:37 # 0
http://ololo.fm/search/Emanuel+Hovaghimian/Spring+(Palabras)
kegdan 08.05.2015 02:16 # 0
TarasB 11.09.2010 11:48 # 0
J0hnny 10.09.2010 22:56 # +2
Прежде чем написать, я посмотрел сюда http://www.freepascal.org/docs-html/rtl/crt/keypressed.html
И если ты не заметил, я спросил явно
>Или где-то не работает?
А кто сказал что после
repeat until KeyPressed;
не надо очищать буфер? Если ты так говнокодишь, после школьного курса TP 7.0, то давай ещё говнокоды студию
bugmenot 11.09.2010 00:12 # −2
Поздно, мистер Баттхёрт!
inkanus-gray 11.09.2010 00:15 # 0
bugmenot 11.09.2010 02:37 # 0
во, раскопал, хотя пованивает, ибо INT 09 может всё испортить
nil 11.09.2010 10:24 # +4
Это из разряда в рот мне ноги хвост!
inkanus-gray 11.09.2010 14:59 # 0
или так:
Но, как я уже писал, стандартная KeyPressed ущербна, поэтому её надо переписывать.
bugmenot 11.09.2010 17:44 # +1
ы?
inkanus-gray 12.09.2010 15:58 # −1
Кто такие ScanCode и @@1? Кусок из Турбовижен?
Кстати, чтобы реагировать на Ф11, Ф12 и всякие суперпуперклавиши современных клавиатур, нужно заменить 1 на 11h.
bugmenot 12.09.2010 17:26 # 0
Моя мысль о том, что не стали переделывать на INT 16 AH=10h,11h именно потому что расширенные клавиши не генерируют символов
bugmenot 12.09.2010 17:30 # 0
inkanus-gray 12.09.2010 18:28 # 0
J0hnny 11.09.2010 18:19 # −1
Те кто программировал на TP, это и так знают. Другим же это нах не надо.
> Но, как я уже писал, стандартная KeyPressed ущербна, поэтому её надо переписывать.
Для кого? Зачем?
bugmenot 12.09.2010 15:33 # −1
J0hnny 11.09.2010 00:19 # −2
Когда у троллопотамусов заканчиваются аргументы, у них начинается словесный понос"
istem 11.09.2010 00:24 # +2
inkanus-gray 11.09.2010 01:30 # +2
bugmenot 11.09.2010 01:44 # 0
sanchousf 12.09.2010 16:28 # −3
Шикарно. А ReadKey; Не подойдет?
Или раз уж раздел по C++
getch();
Altravert 13.09.2010 10:27 # 0
Геч, бля...
sanchousf 13.09.2010 18:14 # 0
repeat until KeyPressed;
что
ReadKey;
результат один. Только ReadKey; извлечет символ из буфера ввода.
А чем тебе неканонический режим не нравится? Просто интересно.
Altravert 15.09.2010 05:17 # +1