C在按键上退出无限循环

时间:2011-07-18 10:07:40

标签: c infinite-loop getch

按下某个键时,如何退出无限循环? 目前我正在使用getch,但它会立即开始阻止我的循环,因为没有更多的输入要读取。

5 个答案:

答案 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)

我建议你阅读这篇文章。

Non-blocking user input in loop without ncurses.

答案 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();
    }