-
最近在写一个电梯模拟程序的时候又开始在实时输入的地方开 始犯愁。
问题是这样的:
要完整的模拟电梯运行,那么电梯在运行的过程中就必须能有乘客上下,而这个上下是由电梯内外的按钮控制的,在按钮按的过程中电梯是持续运行的,所以传统的输入方式(cout、printf、getchar、getch)。
在查阅资料后我发现有个函数非常好用**–kbhit()(#include<conio.h>)** ,这个函数的作用是检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 ,有了这个函数再配合while()或者if()循环/判断下去,就有了一个大致的框架了,确认有输入之后读取,没有输入继续循环,然而一般的输入函数也不满足我们的需要,因为一般的输入都要以Enter结尾,不结尾就会导致程序停留在输入语句,我们这里最好使用getch(),getch()是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车。直接上代码
测试平台:VS2019
/*这个代码的功能是循环
输出“程序继续运行”中
接收键盘输出(不显示),
输入'#'表示结束,然后
输出'#'之前的内容*/
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;
const char end = '#';
bool Function(string& str);
int main()
{
string str;
while (true)
{
if (Function(str))
{
cout << str << endl;
}
cout << "程序继续运行!!" << endl;
//防止程序跑太快看不到输出做的延迟
Sleep(1000);
}
return 0;
}
bool Function(string& str)
{
while (_kbhit())
{
char a = _getch();
// cout << a;
if (a == ::end)
{
// cout << endl;
return true;
}
else
{
str += a;
return false;
}
}
}
新人发帖有什么不完善的地方欢迎给我留言讨论。