如何设置用户在C中输入char的时间限制?

时间:2014-11-07 17:58:27

标签: c windows input time limit

首先,抱歉我的英语不好。我使用了包含在windows.h中的GetTickCount()函数和包含在conio.h中的getch()。

我真正想要的是给用户输入char的时间限制。如果时间限制过去,程序继续执行,跳过等待用户输入字符。

char ch='A';
DWORD start_time, check_time;

start_time=GetTickCount();
check_time=start+500; //GetTickCount returns time in miliseconds, so I add 500 to wait input for half a second.

while (check_time>GetTickCount()) {
ch=getchar();
}

//do stuff with char with initial value of 'A' if user didn't enter another char during 500ms of wait.

但是getchar()停止执行程序并等待用户无限期地输入char。是否有一个简单的解决方案可以绕过这个等待,并在500毫秒通过后继续?

编辑:

根据你的提示,我写了这个,它的确有效!谢谢你们!

while (!kbhit()&&(check_time>GetTickCount()))
    {
        if (kbhit())
        {
            ch=getch();
            break;
        }
    }

2 个答案:

答案 0 :(得分:2)

正如查理·伯恩斯所提议的那样,来自kbhit的{​​{1}}函数完全符合您的要求:它看起来是一个键被击中。

你可以这样做:

conio

小心:未经测试......

答案 1 :(得分:1)

使用 GetTickCount() {{3}

Windows解决方案 }

此方法使用非阻塞Windows API函数 GetAsyncKeyState(),使用 GetTickCount (我没有GetTimeTick)但是可以轻松更改{{ 1}}用于您的系统。

keyPressed(...) 查看256个键中的每个键,包括键盘的虚拟键,如果按下任何内容,则返回true:

GetTickCount()

测试keyPressed功能:

#include <windows.h>  

BOOL keyPressed(char *keys)
{
    for(int i = 0; i<256; i++)
        if(GetAsyncKeyState(i) >> 8) return 1;
    return 0;   
}