使用kbhit()和getch()无阻塞接收用户键盘输入

前言

在我们平时控制台程序的编写过程中,一般情况下都是需要暂停控制台界面,等待用户输入数据之后,程序才会继续运行下去。但是某些情况下,我们希望在循环在用户输入一个按键时才响应特定程序。
常规做法是使用多线程, 如: 子线程中执行任务, 主线程线程中检测用户输入, 然后根据用户输入, 来控制工作线程状态;
如果仅仅是快速做测试, 可以使用C语言中的kbhit()和getch()来实现上述功能.
个人理解: kbhit()内部也是封装了一个线程来检测用户键盘输入.

示例

#include <iostream>
#include <conio.h>  // _kbhit(), _getch()
#include <windows.h>

int main()
{
    int counter = 0;
    char exitflag = '\0';
    while (1)
    {
        std::cout << ++counter << ": hello error!\n";

        Sleep(50);

        //函数名:kbhit()
        //功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
        if (_kbhit())
        {
            // 函数名: getch()
            // 功能及返回值: 从键盘上读取到的字符
            exitflag = _getch();
            if (exitflag == 'q' || exitflag == 'Q')
            {
                std::cout << "用户输入:" << exitflag << ", 退出循环\n";
                break;
            }           
        }
    }

    std::cout << "已经退出了循环\n";

    return 0;
}

// 注:Windows下不推荐使用POSIX。建议使用使用标准C++相似的名称:_kbhit(), _getch()

示例结果

这里写图片描述

参考文章:

关于kbhit函数与延时函数使用
百度百科 - kbhit
kbhit用法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值