如何在按下按键时从无限循环退出? 目前我使用的是getch,但它会尽快阻止我的循环,因为没有更多的输入可供读取。C按键无限循环退出
回答
我建议你去throgh这篇文章。
无论如何,如果您使用的是getch()
,您可以尝试使用kbhit()
来代替conio.h
。请注意这两个getch()
和kbhit()
- conio.h
,其实 - 如果任何键被按下,但它不会阻止像getch()
不规范C.
是的,conio.h不是标准的,因为它们依赖于使用的操作系统。 –
并非C的所有实现都有conio.h,尽管现在很多人都试图提供一个conio.h。确实如何或如何实施取决于平台。 –
功能kbhit()
从conio.h
返回非零值。现在,这显然不是标准。但是,因为你已经在使用getch()
从conio.h
,我认为你的编译器有这个。
if (kbhit()) {
// keyboard pressed
}
CONIO.H是在旧的MS-DOS的编译器用于创建文本用户界面的C头文件。它在C语言程序设计语言书中没有描述,它不是C标准库ISO C的一部分,也不是POSIX所要求的。
针对DOS,Windows 3.x,Phar Lap,DOSX,OS/2或Win32 1的大多数C编译器都有此标题,并在默认C库中提供了相关的库函数。大多数针对UNIX和Linux的C编译器都没有这个头文件,也没有提供库函数。
// Include stdlib.h to execute exit function
int char ch;
int i;
clrscr();
void main(){
printf("Print 1 to 5 again and again");
while(1){
for(i=1;i<=5;i++)
printf("\n%d",i);
ch=getch();
if(ch=='Q')// Q for Quit
exit(0);
}//while loop ends here
getch();
}
如果你不想使用非标准的,无阻塞的方式,但体面退出。使用信号和Ctrl + C与用户提供的信号处理程序进行清理。例如:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
/* Signal Handler for SIGINT */
void sigint_handler(int sig_num)
{
/* Reset handler to catch SIGINT next time.
Refer http://en.cppreference.com/w/c/program/signal */
printf("\n User provided signal handler for Ctrl+C \n");
/* Do a graceful cleanup of the program like: free memory/resources/etc and exit */
exit(0);
}
int main()
{
signal(SIGINT, sigint_handler);
/* Infinite loop */
while(1)
{
printf("Inside program logic loop\n");
}
return 0;
}
- 1. 按退出键退出循环
- 2. 退出无限循环
- 3. 退出无限循环
- 4. 如何在Turbo C++中按Ctrl + Break而无限循环退出
- 5. 用户按ENTER键退出while循环
- 6. Python在ENTER按键上退出循环
- 7. 从异步无限循环退出
- 8. Tkinter退出命令与无限循环
- 9. 检测键无限循环时按下
- 10. 在C++停止无限循环时按键被按下
- 11. 通过退出应用程序退出无限循环
- 12. For循环不会以Javascript退出,无限循环
- 13. C++无法退出while循环
- 14. 正确处理来自无限循环退出在C#
- 15. C# - 无限循环
- 16. C++无限循环
- 17. C,循环退出条件
- 18. 无法退出循环es6
- 19. 无法退出while循环
- 20. 无法退出while循环
- 21. Python退出与Wiimote按钮循环按
- 22. 退出循环
- 23. 修复无限循环PL/SQL。 Cursos。 c%NOTFOUND无法正常工作时退出
- 24. SobiPro出口 - 无限循环
- 25. c无限循环错误
- 26. C++扫雷无限循环
- 27. C++,获得无限循环
- 28. CanvasAuthorize C#SDK无限循环
- 29. 无限while循环在C
- 30. 无限while循环C++
您以前可以使用'while(!kbhit())',但这是与操作系统相关的。您可能需要查看http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html,具体取决于您的操作系统 – forsvarir
如果您使用的是Windows,请查看GetAsyncKeyState函数。 – Juho
kbhit()可能依赖于操作系统,但它在conio.h中声明,就像getch()一样。所以如果他/她使用getch(),他/她也应该有kbhit()。 –