我已经看到这个解决了其他语言但不适用于C ++。我如何让程序等待用户按Enter或类似的键,但是如果没有输入密钥,还会在设定的时间段后自动继续?我需要基本的代码,我是一个初学者。我知道cin.get();或系统(“暂停”);等待钥匙并睡觉(x秒);或睡眠(x毫秒); (使用“windows.h”库)会暂停一个程序,但是如何同时获取这两个程序?
答案 0 :(得分:0)
在Windows中,您可以使用GetAsyncKeyState()
轮询键盘的当前状态。然后,您可以使用Sleep()
睡眠一定的毫秒数。结合这两个,你可以做出你需要的东西:
int keyToWaitFor = VK_SPACE;
int count = 0;
int maxcount = 500;
for(int a = 0; a < maxcount; a++){
if (GetAsyncKeyState(keyToWaitFor)!=0){
break;
}
Sleep(5);
}
答案 1 :(得分:0)
由于您显然希望在Windows上执行此操作,因此非常简单。
首先打开控制台的句柄,例如使用GetStdHandle
。然后,当您想要读取时,在该句柄上调用WaitForSingleObject
,指定超时值。检查退货。如果返回值为WAIT_OBJECT_0
,则表示您有一些输入,您可以阅读(例如)ReadConsoleInput
。如果返回值为WAIT_TIMEOUT
,则表示没有输入,因此您可以执行其他任何操作。
答案 2 :(得分:0)
使用conio.h
,您可以等待kbhit()
和getch()
的按键,并等待20秒的定时器
while循环,while( key==0 && (time_to_wait < secs) )
。
#include <iostream>
#include <cstdio>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
int key=0;
bool quit=false;
void check_if_keypressed();
void gotoxy(int x, int y);
void clrscr();
int main()
{
clock_t start;
double time_to_wait;
double secs=10;
gotoxy(1, 2);
cout<<"Press any key to continue or wait 20 seconds: \n ";
start = clock();
while( key==0 && (time_to_wait < secs) )
{
check_if_keypressed();
time_to_wait = ( clock() - start ) / (double) CLOCKS_PER_SEC;
// proceed with whatever here
gotoxy(1, 23);
cout<<"countdown: "<< secs-time_to_wait <<" \n ";
}
// proceed with whatever here
// while( key!=27)
// {
// check_if_keypressed();
// do_other_stuff();
// }
return 0;
}
void check_if_keypressed()
{
if( kbhit() ) key=getch();
switch(key)
{
case 27:
quit=true;
break;
}
}
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
return;
}
void clrscr()
{
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
GetConsoleScreenBufferInfo(hConsole, &csbi);
FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
SetConsoleCursorPosition(hConsole, coordScreen);
return;
}