继续运行程序,直到用户键入Ctrl + a

我在为Linux考试练习C语言编程。 我不知道如何退出程序,当用户按Ctrl + A(而不是Ctrl + C)例如,循环的东西,直到用户按下Ctrl + A任何人都可以告诉我如何检查Ctrl +input?

注意:我使用'gcc'并用'./a.out'运行输出

在此先感谢大家!

你找这样的东西吗? 这个程序不会因为你点击ctrl + A和Enter而停止。

#include <stdio.h> int main() { char a; while( a!=1 ) //Ascii code for ctrl + A == 1 { a=getchar(); printf("still looping ...\n"); } printf( "HA! You pressed CTRL+A\n" ); return 0; } 

但是如果你想在按下ctrl + A之后终止你的程序(在这之后没有按回车),在这里你是:

 #include <stdio.h> #include <ncurses.h> int main() { char a; initscr(); raw(); while( a!=1 ) a=getch(); endwin(); return 0; } 

要使用GCC编译第二个代码,请尝试以下命令:

 gcc -o program.o -lncurses program.cpp 

Turbo C和C for Windows的其他实现有一个函数调用getch() ,它将从键盘读取单个字符; 那些会做你想做的。

在POSIX环境中,例如在Unix / Linux下由gcc编译的程序实现,那个功能不是直接存在的。

有一个名为curses的库,它允许C程序进行全屏输出处理,而curses中也有getch()功能。 这可能会成为你的问题最简单的答案。 您需要阅读关于curses的文档,并将头文件和库链接到您的程序中。

Ctrl-C有特殊的支持,由系统翻译成信号。 如果您希望程序在使用另一个特定组合键时立即停止,那将会更加困难。

  • 您将需要检查程序的标准输入,并且需要设置标准输入,以便输入不被缓冲(否则在用户按下“return”确认之前,您将看不到任何输入)。 后一部分将通过ioctl()调用来完成,并且不会移植;

  • 你将需要线程或轮询,其中没有一个是非常可口的C.

C中有比这些更有趣的事情来练习。

捕捉ctrl-c事件

这个职位回答你的问题

这将做你想要的:

 stty intr ^a ./a.out 

额外的信用,使用适当的库函数,例如“man termios”,做相当于“stty intr ^ a”。

有人张贴第一个以下代码适合我,但我不知道他为什么删除了他的答案。

原始链接: http : //www.c.happycodings.com/Gnu-Linux/code18.html

 #include <stdio.h> #include <unistd.h> /* sleep(1) */ #include <signal.h> void ex_program(int sig); int main(void) { (void) signal(SIGINT, ex_program); while(1) printf("sleeping .. ZZZzzzz ....\n"), sleep(1); return 0; } void ex_program(int sig) { printf("Wake up call ... !!! - Catched signal: %d ... !!\n", sig); (void) signal(SIGINT, SIG_DFL); } 

这是如何将CTRL-A设置为中断来中断进程。 请注意,在tcsetattr被调用后,CTRL-C不会中断它。

 #include <stdio.h> #include <termios.h> #include <unistd.h> int main(int argc, char* argv[]) { struct termios termios; if ( tcgetattr(0, &termios) != -1 ) { termios.c_cc[VINTR] = '\x01'; /* CTRL-A */ if ( tcsetattr(0, 0, &termios) != -1 ) { printf("Ready. Press CTRL-A to break this program\n"); while ( 1 ) { printf("*\n"); sleep(1); } } } }