Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2013, 18:18   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию С++ выход при нажатии клавиши

Нужно сделать так, чтобы выполнялся цикл пока пользователем не будет нажата клавиша, например 0. Проблема в том, что если делать цикл типа
Код:
ch=getch();
while(ch!='0')
{
...
}
то получаем не тот результат.

Код:
do
{
 ch=getch();
 ...
 } while(ch!='0');
такая штука тоже не подходит

Забыл сказать, язык С++
Praud вне форума Ответить с цитированием
Старый 21.07.2013, 19:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
while()
{
 if(kbhit && getch()=='0') break;
}
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2013, 19:13   #3
OstyN
Пользователь
 
Аватар для OstyN
 
Регистрация: 31.12.2011
Сообщений: 12
По умолчанию

kbhit() - возвращает не ноль в случае нажатия клавиши клавиатуры и ноль в противном случае.

Код:
#include <conio.h>
...
while( !kbhit() ) {
    // do something
}
Asm, C/C++
OstyN вне форума Ответить с цитированием
Старый 21.07.2013, 19:34   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

OstyN, это вообще не то. Мне нужна конкретная клавиша.

Stilet, похоже на правду. Но я что-то не понял куда впихнуть. Вот фрагмент кода

Код:
while(1)
	{			
	if(_kbhit && _getch()=='0') break;
	else
	{
	SetCursorPos(cp.x,cp.y);
	Sleep(1000); 
	 mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
	 mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);

	 SetCursorPos(cp2.x,cp2.y);
	Sleep(1000);
	 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
	 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

	 SetCursorPos(cp3.x,cp3.y);
	Sleep(1000);
	 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
	 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
	}
	 
	}
Praud вне форума Ответить с цитированием
Старый 21.07.2013, 19:42   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Что-то типа:
Код:
#include <conio.h>
#include <stdio.h>
#include <windows.h>

int main( void )
{

	while(1){
		/* Display message until key is pressed. */
		while( !_kbhit() )
			{_cputs( "Hit me!! \n" );
		Sleep(500);
		}

		/* Use _getch to throw key away. */
		int ch = _getch();
		switch(ch)
		{
			case '0':
				_cputs( "\nYEHAAA!!!!!!! \n") ;
				break;
			case 0x1B /*VK_ESCAPE*/:
				return 0;
				break;
			default:
				printf( "\nKey struck was '%c'\n",  ch);
				break;
		}		
	}
}

Последний раз редактировалось Smogg; 21.07.2013 в 20:13.
Smogg вне форума Ответить с цитированием
Старый 21.07.2013, 20:15   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Не смешно, когда писал код единственное что мне помогало это гугл и я его пока писал "лишь бы работало"
Praud вне форума Ответить с цитированием
Старый 21.07.2013, 21:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что-то не понял куда впихнуть.
Ну как же не понял? Впихнул же куда надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2013, 21:13   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Вообще-то, там было не про посмеяться, а про необходимость двойного цикла.

// Или у меня не получилось обойтись одним.

Последний раз редактировалось Smogg; 21.07.2013 в 21:16.
Smogg вне форума Ответить с цитированием
Старый 21.07.2013, 22:01   #9
Andy85
Новичок
Джуниор
 
Регистрация: 21.07.2013
Сообщений: 3
По умолчанию

Я бы написал так:

Код:

#include <iostream>
#include <string>

using namespace std;

...

string str;
 while ((!getline(cin, str)) || (str != "твоя клавиша"))
 {
    SetCursorPos(cp.x,cp.y);
   Sleep(1000); 
    mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);

    SetCursorPos(cp2.x,cp2.y);
   Sleep(1000);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

    SetCursorPos(cp3.x,cp3.y);
   Sleep(1000);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
 }
Andy85 вне форума Ответить с цитированием
Старый 21.07.2013, 22:18   #10
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Andy85 Посмотреть сообщение
Я бы написал так:
Код:
 while ((!getline(cin, str)) || (str != "твоя клавиша"))
Ввод пароля?
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов формы при нажатии клавиши Veryn4ik1993 C# (си шарп) 2 11.03.2013 12:41
Зацикливание при нажатии клавиши в DirectInput Sargonass Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 14.01.2012 19:42
Событие при нажатии клавиши. werrey Общие вопросы Delphi 3 09.06.2011 21:33
Событие при нажатии клавиши Enter Inbox Общие вопросы Delphi 4 12.06.2007 14:18