按下某个键时,如何退出无限循环? 目前我正在使用getch,但它会立即开始阻止我的循环,因为没有更多的输入要读取。
答案 0 :(得分:5)
如果您正在使用getch()
中的conio.h
,请尝试使用kbhit()
。请注意,getch()
和kbhit()
- conio.h
实际上都不是标准C.
答案 1 :(得分:3)
如果按下任何键,kbhit()
中的函数conio.h
将返回非零值,但不会像getch()
那样阻止。现在,这显然不是标准的。但是,由于您已经使用getch()
中的conio.h
,我认为您的编译器具有此功能。
if (kbhit()) {
// keyboard pressed
}
来自Wikipedia,
conio.h是旧的MS-DOS编译器中用于创建文本用户界面的C头文件。 “C编程语言”一书中没有对它进行描述,它不是C标准库的一部分,也不是ISO C的一部分。
大多数针对DOS,Windows 3.x,Phar Lap,DOSX,OS / 2或Win32 1的C编译器都有此标头,并在默认C库中提供相关的库函数。大多数针对UNIX和Linux的C编译器没有此标头,也没有提供库函数。
答案 2 :(得分:2)
我建议你阅读这篇文章。
答案 3 :(得分:1)
如果您不想使用非标准,非阻塞方式而且优雅退出。使用信号和 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;
}
答案 4 :(得分:0)
// 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();
}