Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Раньше в Си пользовался getc(); для отладки. В С++ не работает.

Dimosh Davidow Знаток (292), закрыт 1 неделю назад
Раньше в любую строку кода вставил getc(); и смотришь значения переменных, что в строки зашло, выход из программы до ошибки можно было просчитать..
Сейчас в С++ знаю GetAsyncKeyState();
Так там когда у меня происходит например цикл for(i==0,i==100,i++);
И встраиваю GetAnsyncKeyState(), могу посмотреть значения переменных.
Когда в цикл добавляю random(100,100); GetAnsyncKeyState() - срабатывает только когда цикл весь закончится. Тогда он уже молодец помнит что кнопка была нажата.
Я так понял такая ситуация была вроде и когда в теле одной функции, есть вызов другой, то GetAnsyncKeyState() выполняется уже после всего что произошло в теле функции.
Вы понимаете меня. Я из за этого бросил всё.

Неужели в С++ нет нормального вызова клавиши??????????

Обработчик событий клавиатуры OnKeyPress , то вообще через раз может сработать, может нет, теряет момент нажатия.
Честно не помню точных ситуаций.
Лучший ответ
Def Гений (67181) 2 недели назад
Как ответили выше - для отладки используется отладчик и брекпоинты.

Касательно функций - getc предназначена для того, чтобы из потока вычитывать один символ, а не для того, чтобы отслеживать нажатия кнопок. Можно, конечно, явным образом ей попробовать подсунуть поток ввода в виде:
 getc(stdin); 
получив ожидание нажатия Enter (а вовсе не ввода любого символа в буфер ввода), но это сомнительное занятие. Нажатие кнопки раньше отслеживалось через getch(), но эта функция специфична для компилятора и сейчас по этой причине называется _getch() и находится в conio.h в микрософтовском компиляторе

>Неужели в С++ нет нормального вызова клавиши??????????
В консольных программах не предусмотрено отслеживание низкоуровневых нажатий/отпусканий чем-либо, кроме платформенных библиотек, так как сама консоль рассматривается, с точки зрения языка, прежде всего, как эмулятор терминала - телетайпа (существующего, на минуточку, с 30х годов и появившегося задолго до появления компьютера), который такой функциональностью не обладает и предназначен лишь для получения/отправки потоков символов (а не сканкодов).
Dimosh DavidowЗнаток (292) 1 неделю назад
Нашёл я в чём проблема.
Каждый раз когда я выводил значения TextOut();
Я всегда следом ставил sleep(); - чтоб посмотреть успеть.
Так вот проблема в том, что куда бы ты не вписал sleep(); - он будет выполнен без очереди.
Тоесть сначала пауза, а потом весь блок кода.
Хоть sleep(); TextOut(); хоть TextOut(); sleep();
Sleep выполнится первым. Такая вот ерунда. Наделали создатели языка.
Getch(); не работает, но уже не в нем проблема. GetAsyncKeyState(); - вполне нормально.
Def Гений (67181) Dimosh Davidow, и sleep, и TextOut будут выполнены в том порядке, в котором вызваны. То, что у вас там что-то не выводится прям сразу, особенно (если судить по комментарию) если приложение графического режима - то это по той причине, что вы не знаете, как именно работает отрисовка - она не рисует на экран, а в буфер, который выводится лишь после того, как по окончанию отрисовки будет вызван SwapBuffers . В приложениях текстового режима аналогично - вывод идёт не напрямую на вывод устройства, а в буфер вывода, который отправится на устройство после вызова flush(), добавления std::endl в поток или при заполнении буфера. В графических программаx _getch() работать не будет. К самому языку все вышеприведённые факты отношения не имеют.
Остальные ответы
Хлебушек Оракул (77632) 2 недели назад
а чего, дебагера в твоей среде разработки не существует?

Плюсы подддерживают же старые СИшные функции - getc()

а обычный cin либы iostream не подходит?
Dimosh DavidowЗнаток (292) 2 недели назад
Я не люблю выходить из программы чтоб посмотреть. Дебагеры никогда не пользовался.
cin - это когда строка ввода появляется? Никогда такое не применяю, это же в цикле не практично.
Почему-то getch() у меня не работает. - проверял сейчас.
Хлебушек Оракул (77632) Dimosh Davidow, выходить? во время дебага программа итак работает, только с брейкпоинтами. VSCode есть? поставь плагин Native debugger https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb
Похожие вопросы