如何检测是否在C++;? 我正在寻找一种方法来检测在Windows环境C++控制台应用程序中是否有任何键被按下。强调任何键,而不是特定键或一组键。我在这个网站上到处搜索,找不到答案。我发现最好的方法是使用GetKeyState函数或GetAsyncKeyState,但没有关于如何使用它的示例,我也查看了Microsoft网站上的文档,仍然不确定如何使用它
如果这是相关的并且有帮助,我使用的是Visual Studio,并且在创建此项目时,我选择了空项目,而不是控制台应用程序 预计该计划的大纲如下所示: 以下是我到目前为止在主.cpp文件中使用的代码:如何检测是否在C++;? 我正在寻找一种方法来检测在Windows环境C++控制台应用程序中是否有任何键被按下。强调任何键,而不是特定键或一组键。我在这个网站上到处搜索,找不到答案。我发现最好的方法是使用GetKeyState函数或GetAsyncKeyState,但没有关于如何使用它的示例,我也查看了Microsoft网站上的文档,仍然不确定如何使用它,c++,windows,console,C++,Windows,Console,如果这是相关的并且有帮助,我使用的是Visual Studio,并且在创建此项目时,我选择了空项目,而不是控制台应用程序 预计该计划的大纲如下所示: 以下是我到目前为止在主.cpp文件中使用的代码: #ifndef MAINCPP #define MAINCPP #include "TwelveClock.h" #include "TwentyFourClock.h" #include <iostream> #include <iomanip> #include &l
#ifndef MAINCPP
#define MAINCPP
#include "TwelveClock.h"
#include "TwentyFourClock.h"
#include <iostream>
#include <iomanip>
#include <Windows.h>
using namespace std;
void displayMenu() {
cout << setw(27) << setfill('*') << "" << endl;
cout << "* 1 -- Add One Hour" << setfill(' ') << setw(8) << '*' << endl;
cout << "* 2 -- Add One Minute" << setw(6) << '*' << endl;
cout << "* 3 -- Add One Second" << setw(6) << '*' << endl;
cout << "* 4 -- Exit Program" << setw(8) << '*' << endl;
cout << setw(27) << setfill('*') << "" << endl;
}
void displayClocks(TwentyFourClock& tfc, TwelveClock& tc) {
cout << setfill('*') << setw(24) << "" << " " << setw(25) << "" << endl;
cout << setfill(' ') << "*" << setw(17) << "12-Hour Clock" << setw(6) << "*" << " *" << setw(17) << "24-Hour Clock" << setw(7) << "*" << endl;
cout << "*" << setw(5) << "" << setw(2) << setfill('0') << tc.Get_hour() << ":" << setw(2) << tc.Get_minute() << ":" << setw(2) << tc.Get_second() << " " << tc.Get_strPM_status() <<setfill(' ') << setw(7) << "*";
cout << " *" << setw(7) << "" << setw(2) << setfill('0') << tfc.Get_hour() << ":" << setw(2) << tfc.Get_minute() << ":" << setw(2) << tfc.Get_second() << setfill(' ') << setw(9) << "*" << endl;
cout << setfill('*') << setw(24) << "" << " " << setw(25) << "" << endl;
}
int main() {
TwentyFourClock TwentyFour;
TwelveClock Twelve;
while (1) {
system("cls");
displayClocks(TwentyFour, Twelve);
//FIXME: check if button is pressed
TwentyFour.Set_second(TwentyFour.Get_second() + 1);
Twelve.Set_second(Twelve.Get_second() + 1);
Sleep(1000);
}
return 0;
}
#endif
\ifndef MAINCPP
#定义MAINCPP
#包括“十二时钟.h”
#包括“二十四小时”
#包括
#包括
#包括
使用名称空间std;
void displayMenu(){
cout允许您检查某个键是否被按下。与此不同,它会立即返回,并且在输入缓冲区中没有要读取的数据时不会阻塞
两种函数都是微软对C运行时(CRT)的特定扩展,而不是标准C或C++的一部分。
对次要问题的答复:
我担心我的程序甚至无法检测到任何输入,因为sleep函数会暂停执行
控制台输入由操作系统处理,并在您不侦听输入时为您进行缓冲。从控制台输入读取的线程不必在输入到达时处于唤醒状态。当它醒来检查时,它将始终能够观察缓冲区中的输入
如果是这样,有什么更好的方法
这种情况不会发生。但是,有更好的选项来实现这些需求。由于目前已经实现,应用程序将无法在睡眠
超时过期之前响应输入。虽然这是可靠的,但这会导致用户击键和应用程序响应输入之间出现明显的延迟
<> P>有两种方法可以解决这一问题。Windows API和C++编程语言都提供了允许您实现等待操作的服务,只要满足几个条件之一,就可以返回(例如,等待键被按下或超时已经过期)。
这些解决方案涉及并需要对Windows API或C++有着深刻的了解——最好两者都要消化。我怀疑你们会受益匪浅(试一试)。此时要了解这些。继续您的旅程,稍后再回来,享受知道这可以解决的舒适感。
部分大纲是在按下按钮时显示菜单,如果未按下按钮,请添加一秒钟,然后等待一秒钟,然后重复while循环。