gpt4 book ai didi

c - kbhit() 作为转义触发器

转载 作者:可可西里 更新时间:2023-11-01 10:26:55 27 4
gpt4 key购买 nike

我想将 kbhit() 用于“按任意键继续”功能。但是,在循环中使用 kbhit() 之后,按下的键存储在标准输入中。所以在下一个 scanf() 中,之前按下的键出现在输入中。

int x,b=0;    
printf("Press any key to continue...")
while (b==0) {

b=kbhit();

}
system("cls");

printf("Enter number:");

scanf("%d",&x);

因此,如果用户按下一个键,比如说字母 K,k 会出现在“输入数字:”之后。

我曾尝试寻找解决方案,但未能使任何解决方案奏效。我试图将退格字符放入输入流中。我也尝试使用 getch(),但是,用户必须按“Enter”才能继续,所以它违背了最初的目的。我还尝试通过关闭和打开来清除标准输入流,但我无法正确打开它。

编辑:正如 janisz 在评论中所说,我所需要的只是使用 system("pause")。虽然我不能编辑正如 janisz 在评论中所说的那样,我所需要的只是使用 system("pause")。虽然我无法编辑“按任意键继续”,但它足以满足我的目的。如果可能的话,我将继续尝试此处提供的其他解决方案以获得更好的结果,但就目前而言,我需要 system("pause")。

EDIT2:好的,有些人建议使用 getch()。从我在网上看到的情况来看,getch() 函数从流中获取输入,而字符实际上没有显示在屏幕上,这正是我想要的。但是,当我尝试使用 getch() 时,程序在我按下任意键后不会继续,它会等待我按下回车键。有问题吗?我在 Windows 7 上使用 C-Free 4 Standard。

最佳答案

kbhit() 返回一个整数值,指示用户是否按下了某个键。请注意,按下的键仍保留在缓冲区中。您所要做的就是使用 fflush(stdin) 语句刷新标准输入缓冲区。

但是,如果您想使用用户按下的键,则必须在使用 kbhit() 之后使用 getch() 或 scanf 语句。

您可能会在 "How to use kbhit in C and C++" here 上阅读一篇不错的文章有关确切的使用说明。

关于c - kbhit() 作为转义触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com