如何为用户添加输入内容的时间限制,否则它会继续

How to add a time limit for user to input something or else it goes on?

本文关键字:继续 时间 用户 添加 输入      更新时间:2023-10-16

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

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

那么在这个例子中,我如何添加5秒的时间来输入name,如果用户在5秒内没有输入任何东西,程序应该去输入phonenoe

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

好吧,我被否决了。

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

只是为了好玩。

#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;
}