Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么_kbhit()在C程序中只能工作一次?_C++_C - Fatal编程技术网

C++ 为什么_kbhit()在C程序中只能工作一次?

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

我刚刚编写了这个小程序,它应该等待用户在打印每一行之前键入一些内容,但它只适用于第一个_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;
}
#包括
#包括
#包括
内部主(空)
{
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();

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

它在您链接的文档中正确地说明了如何使用击键。但它并没有说您必须使用击键。用户不必使用击键,可以将其留在那里,然后简单地退出。但正如文档所说,“如果函数返回非零值,则击键正在缓冲区中等待。”不使用它,击键仍然是等待更改的一分钱。它在您链接的文档中说明了如何使用击键。但它没有说您必须使用击键。用户不必使用击键,可以把它留在那里,然后简单地退出。但是正如文档所说,“如果函数返回一个非零值,则击键正在缓冲区中等待。”不使用它,击键仍然是等待更改的一分钱。