C在按键上退出无限循环

问题描述 投票:8回答:5

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

c infinite-loop getch
5个回答
2
投票

我建议你仔细阅读这篇文章。

Non-blocking user input in loop without ncurses.


4
投票

如果你正在使用来自getch()conio.h,请尝试使用kbhit()。请注意,事实上getch()kbhit() - conio.h都不是标准C.


2
投票

kbhit()函数conio.h返回非零值,如果有任何键被按下但它不像getch()那样阻塞。现在,这显然不是标准的。但是,由于你已经在使用getch()conio.h,我认为你的编译器有这个。

if (kbhit()) {
    // keyboard pressed
}

来自Wikipedia

conio.h是旧的MS-DOS编译器中用于创建文本用户界面的C头文件。它没有在C编程语言书中描述,它不是C标准库的一部分,ISO C也不是POSIX所要求的。

大多数针对DOS,Windows 3.x,Phar Lap,DOSX,OS / 2或Win321的C编译器都有此标头,并在默认C库中提供相关的库函数。大多数针对UNIX和Linux的C编译器没有此标头,也没有提供库函数。


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;
}

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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.