Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Цикл до нажатия клавиши


Автор: 6Apokali6sis6 26.2.2007, 20:42
Прошу прощения, что обращаюсь со столь простецким вопросом, но требуется организовать цикл условием окончания которого является определённой клавиши из стандартного набора.Если не ошибаюсь в паскале это keypressed, а вот как оно звучит в Си++ хотел бы узнать.
Заранее благодарен.

Автор: Fazil6 26.2.2007, 20:56
getch()

Автор: threef 26.2.2007, 21:00
Код

while (!kbhit() ) ; getch();

Автор: Fazil6 26.2.2007, 21:04
Код

/* Display message until key is pressed. */
   while( !_kbhit() )
      _cputs( "Hit me!! " );


Автор: Yra 26.2.2007, 21:07
а я бы цикл поместил в поток. и по нажатию чего-то завершил этот поток.  smile 

Автор: ip127001 26.2.2007, 22:07
Цитата(threef @  26.2.2007,  21:00 Найти цитируемый пост)
kbhit() 

это из какой библиотеки функция?

Автор: Greeen 26.2.2007, 22:17
conio.h

Автор: Rockie 26.2.2007, 23:52
6Apokali6sis6, если для борланда то можно делать к примеру так:
Код

#include<stdio.h>
#include<conio.h>

int main()
{
  char t;

  while(1){
  t = getch();
  if(t == 27) break;         // if pressed ESC
  if(t == ' ') printf("\n"); // if pressed SPACE
  else printf("%c",t);       // display word
  }

  return 0;
}


этот код отображает вводимые символы, при пробеле осуществляет переход на новую строку, при esc - завершает программу, при вводе - не спрашивайте smile

Добавлено @ 00:04 
кстати вышеприведенный код с добавлением 
Код

#include "stdafx.h"

только что скомпилировал в VS 2005. smile полтергейтс?

Автор: 6Apokali6sis6 27.2.2007, 17:32
Благодарю, kbhit() это  и есть решение проблемы, а код клавиши вписать в него как 111 или #111?

Автор: threef 27.2.2007, 19:28
если ты ждешь конкретную клавишу, то лучше :
Код


while (getch() != '\x20' );// hex- код пробела
   


если ожидание нажатия на любую клавишу:

Код

char pause(int santiseconds=-1)
{
    cputs("pause...\n");
    while ( !kbhit ()  && santiseconds-- !=0 )
        _sleep(0);// все равно 10 мс. "разгружает" процессор - переводит поток в состояние \\ожидания
     return santiseconds ? getch() : '\0' ;     
}


Автор: 6Apokali6sis6 1.3.2007, 17:18
Угу вот только разве getch() не будет останавливать работу программы и ждать наатия клавиши? А вот kbhit() не останавливает основную работу, например внутренностей цикла. посему мне нужен кбхит, и отсюда вопрос, там кк онкретному символу можно обратиться так-же как тут:
Код

while (getch() != '\x20' );// hex- код пробела

И ещё один вопрос, что есть хекс код?Как он согласуется с таблицой ASCII?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)