0

很长一段时间以来,我试图在 C++ 中放置一个计时器,它实际上给出了有限的时间来输入任何东西,例如:- 如果我输入

cout<<"Enter the name :-  
cin>>name;  
cout<<"Enter Phonenoe :- ";  
cin>>phoneno;

所以在这个我如何添加时间说 5 秒来输入姓名,如果用户在 5 秒内没有输入任何内容,程序应该去输入音素。

给出完整代码,我是初学者。

4

2 回答 2

1

纯娱乐。仅适用于 Windows。

#include <windows.h>
#include <iostream>
#include <string>

bool wait_for_key(int timeout_milliseconds, char& ch) {
    HANDLE tui_handle = GetStdHandle(STD_INPUT_HANDLE);
    DWORD tui_evtc = 0;
    DWORD deadline = GetTickCount() + timeout_milliseconds;
    INPUT_RECORD tui_inrec = { 0 };
    DWORD tui_numread = 0;

    while (GetTickCount() < deadline) {
        if (tui_evtc > 0) {
            ReadConsoleInput(tui_handle, &tui_inrec, 1, &tui_numread);
            if (tui_inrec.EventType == KEY_EVENT) {
                if (tui_inrec.Event.KeyEvent.bKeyDown) {
                    ch = tui_inrec.Event.KeyEvent.uChar.AsciiChar;
                    return true;
                }
            }
        }
        YieldProcessor();
        GetNumberOfConsoleInputEvents(tui_handle, &tui_evtc);
    }

    return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE tui_handle = GetStdHandle(STD_INPUT_HANDLE);

    std::string name;
    std::string other;

    std::cout << "name: ";

    char ch;
    if (wait_for_key(5000, ch)) {
        std::cout << ch;
        std::getline(std::cin, name);
        name = ch + name;

        std::cout << "name is '" << name.c_str() << "'" << std::endl;
    } else {
        std::cout << std::endl << "other: ";
        std::getline(std::cin, other);

        std::cout << "other is '" << other.c_str() << "'" << std::endl;
    }

    return 0;
}
于 2013-04-24T16:54:36.417 回答
1

好吧,我被否决了。

我为此找到的最好的谷歌是在这里。简而言之,这在 C++ 中很难做到,我相信不可能以可移植的方式做到。在汇编程序中,我会轮询最低级别的键盘中断(我认为是 9h)以查看会发生什么,但那是在 DOS 时代,我不确定这是否有效。

于 2013-04-24T16:13:41.303 回答