C++ 为什么_kbhit()在C程序中只能工作一次?
我刚刚编写了这个小程序,它应该等待用户在打印每一行之前键入一些内容,但它只适用于第一个_kbhit(),之后就不再等待了。为什么C++ 为什么_kbhit()在C程序中只能工作一次?,c++,c,C++,C,我刚刚编写了这个小程序,它应该等待用户在打印每一行之前键入一些内容,但它只适用于第一个_kbhit(),之后就不再等待了。为什么 #include <stdio.h> #include <stdlib.h> #include <conio.h> int main(void) { printf("Canada\n"); while ( _kbhit() == 0 ); printf("is\n"); while ( _kbhi
#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;
}
#包括
#包括
#包括
内部主(空)
{
printf(“加拿大”);
而(_kbhit()==0);
printf(“is\n”);
而(_kbhit()==0);
printf(“太棒了!”);
而(_kbhit()==0);
返回0;
}
在文档中没有信息表明_kbhit()在一个程序中只工作一次。虽然在文档页面中没有明确说明,但您必须使用击键(使用
getch
或getche
),否则\u kbhit
仍会看到它。在while循环之后调用\u getch
,在下一个循环之前调用:
while(_kbhit() == 0);
_getch();
// _kbhit can now be called again
虽然在文档页面中没有明确说明,但您必须使用击键(使用
getch
或getche
),否则\u kbhit
仍会看到它。在while循环之后调用\u getch
,在下一个循环之前调用:
while(_kbhit() == 0);
_getch();
// _kbhit can now be called again
Kninnug的答案是可行的,但它不必要地增加了处理器使用量,因为while循环必须反复执行。 更好的解决办法是直接使用
_getch();
在这种情况下,程序将等待用户按下任何按钮而不浪费处理器时间,Kninnug的答案将起作用,但它会不必要地增加处理器使用量,因为while循环必须反复执行。 更好的解决办法是直接使用
_getch();
在这种情况下,程序将等待用户按下任何按钮而不浪费处理器时间它在您链接的文档中正确地说明了如何使用击键。但它并没有说您必须使用击键。用户不必使用击键,可以将其留在那里,然后简单地退出。但正如文档所说,“如果函数返回非零值,则击键正在缓冲区中等待。”不使用它,击键仍然是等待更改的一分钱。它在您链接的文档中说明了如何使用击键。但它没有说您必须使用击键。用户不必使用击键,可以把它留在那里,然后简单地退出。但是正如文档所说,“如果函数返回一个非零值,则击键正在缓冲区中等待。”不使用它,击键仍然是等待更改的一分钱。