0

我刚刚写了这个小程序,它应该等待用户在打印每一行之前输入一些东西,但它只适用于第一个 _kbhit(),之后不再等待。为什么?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
    printf("Canada\n");
    while ( _kbhit() == 0 );

    printf("is\n");
    while ( _kbhit() == 0 );

    printf("great!");
    while ( _kbhit() == 0 );

    return 0;
}

函数参考中没有任何信息表明 _kbhit() 在程序中只工作一次。

4

2 回答 2

2

虽然在该文档页面中没有明确说明,但您必须使用击键(使用getchor getche),否则_kbhit仍会看到它。_getch在下一个之前的while循环之后调用:

while(_kbhit() == 0);
_getch();
// _kbhit can now be called again
于 2013-10-17T19:27:58.530 回答
2

Kninnug 的答案会起作用,但它会不必要地提高处理器的使用率,因为 while 循环必须一遍又一遍地执行。更好的解决方案是只使用

_getch();

在这种情况下,程序将等待用户按下任何按钮,而不会浪费处理器时间

于 2019-08-01T10:07:27.983 回答