循环程序跳出(_kbhit()、getch() 、getchar())
在构建一个循环程序的时候 程序跳出环节 是构建一个合理的程序重要的一环 在进行程序跳出的过程 如何触发程序跳出条件也是一个重要的环节
按键流触发跳出条件
以下代码为一个完整的按键跳出循环程序
int i = 10,j=0;
while (j < i)
{
i += 3;
Sleep(520);
cout << "正在加油中!! 目前油量" << i << "% \r";
if (_kbhit())//非阻塞的响应键盘输入时间 (检测是否有按键按下,有按下返回非0值,一般是1没有按下返回0 需要包含 <conio.h>文头件)
{
if (_getch() == 27)//从标准输入流(键盘)读取ESC键 (相较于getchar()接收按键后还需按下回车才能返回 _getch()不用按下回车就能返回 返回值为输入的Ascii码 需要包含 <conio.h>头文件)
{
cout << "暂停加油!! 当前油量 :" << j << endl;//显示程序跳出提示并换行
cout << endl;//再次换行
break;
}
}
}
一个完整的按键跳出程序 需要一个while循环 一个_kbhit()非阻塞键盘函数_getch()获取键盘流字符的函数
要使用这两个函数必须包含<conio.h>通用输入输出库
_kbhit()函数
_kbbit()函数的作用是检查控制台窗口的按键是否被按下 其格式为
int _kbhit( void );
如果在调用该函数时,有按键被按下,则返回一个非0值 ,否则该函数的返回值是0 需要注意的是,该函数是一个非阻塞函数,不管有没有按键被按下,该函数都会立即返回 _khbit()函数一般与_getch()函数与getche()函数组合使用获取按键信息
为什么需要此函数?
因为_getch()和getchar()等从控制台获取输入字符函数具有阻塞性 只有从控制台读取到了输入的字符才会有返回值(程序运行至此停滞 等待从控制台获取输入字符)导致程序无法正常循环 在获取字符函数外层包裹一个无论有没有输入字符都会返回值的 _kbhit()函数作为判断条件 则能使程序在正常循环的过程中能被随时进行按键中断跳出
_getch()函数
_getch()函数的作用是从控制台中获取输入的字符,在获取输入的字符之后,并不会在控制台中显示该字符 该函数的格式为
int _getch( void );
该函数的返回值是获取到的字符值。需要注意的是,_getch()函数是一个阻塞函数,直到有字符输入时才会返回,所以该函数不会返回错误值
getch();接受一个任意键的输入,不用按回车就返回 ,该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上,需要putchar();函数输出显示 getch();函数常用于中途暂停程序方便调试和查看
getchar()函数
getchar();从键盘读取一个字符并输出,该函数的返回值是输入第一个字符的ASCII码,若用户输入的是一连串字符,函数直到用户输入回车时结束,输入的字符连同回车一起存入键盘缓冲区,若程序中有后继的getchar();函数,则直接从缓冲区逐个读取已输入的字符并输出,直到缓冲区为空时才重新读取用户的键盘输入
_getch()函数与 getchar()函数的区别
_getch()函数的作用是获取按键信息,且该函数在conio.h中定义。_getche()函数与_getch()函数函数类似,其作用也是获取按键信息,并且也是在conio.h中定义。不同之处在于,_getch()函数不会在控制台中显示按键信息,而getche()函数会在控制台中显示按键信息
getchar()函数的作用也是获取按键信息,该函数在stdio.h中定义。_getch()函数和_getche()函数是直接从键盘上获取按键信息,getchar()函数是从控制台输入缓冲区中获取按键信息,所以只有当按下了回车按键后,getchar()函数才会开始获取字符信息
总之
1._getche()和getchar()都是阻塞性函数
2._getche()会在控制台显示按键信息 _getch()不会显示按键信息
3._getch()无需按下回车即可获取按键消息 getchar()需要按回车才会开始获取字符信息
4. _kbhit()函数能检测键盘输入但是没有阻塞性
源自-C++类与对象项目