【发布时间】:2019-04-28 15:06:14
【问题描述】:
我尝试使用 getch() 和 kbhit() 来读取用户的输入,但它似乎没有识别出某个键被按下。
void main(){
printf("start\n");
while (1){
if (kbhit() == 1){
printf("in\n");
int k = getch();
printf("k: %d\n", k);
}
}
}
此代码打印“开始”并且在按下键时不打印任何内容。我没有运气使用 getch() 读取和打印一个字符,没有循环。
【问题讨论】:
-
无法复制。但另一方面,
kbhit()和getch()不是标准函数,因此它们的规格可能会有所不同。也许您可以作为第一步使您的代码标准符合int main(void) {和return 0;末尾的main。这些函数kbhit()和getch()是从哪里来的?哪个编译器和平台? -
你试过
if(kbhit())而不比较1吗? -
当前答案是正确的(
kbhit返回非零,即 not 必然与 1 相同)。您也应该检查getch 的文档,因为您当前的逻辑有点奇怪。通常您会使用返回值来检查控制字符并再次调用getch。您还有一个繁忙的循环,它将在您的一个处理器内核上疯狂地旋转。您可能需要在其中添加一个小延迟(例如Sleep(30))以保持理智。 -
那里有许多名为 WinBGI 和类似名称的库。你的大学不提供文件吗?你确定
kbhit()返回 1 吗?你试过if(kbhit())而不与0比较吗? – 我也使用了 void main() – Visual Sudio 2013 编译与否无关紧要,根据 C 语言标准,它是int main(void)。请使用它。另外:2018年你为什么用VS2013? Visual Studio 2019 即将发布。 -
... 所以它应该是
if (kbhit())并注意getch返回应该检测到的功能键、光标键等的“转义”值,如果被调用两次。您可以编写一个简单的测试程序来检查这一点。