我正在为Linux考试进行C编程。 用户按Ctrl + a(不是Ctrl + c)时,我不知道如何退出程序 例如,循环某事直到用户按Ctrl + a 谁能告诉我如何检查Ctrl +输入?
注意:我正在使用'gcc'并使用'./a.out'
运行输出先谢谢大家!
答案 0 :(得分:3)
Turbo C和C for Windows的其他实现有一个函数调用getch()
,可以从键盘读取单个字符;那些会做你想做的。
在POSIX环境中,例如由Unix / Linux下的gcc编译程序实现,该功能并非直接存在。
有一个名为curses
的库,它允许C程序进行全屏输出处理,并且curses中还有getch()
个功能。这可能最终成为您问题的最简单答案。您需要阅读有关curses的文档,并将头文件和库链接到您的程序中。
答案 1 :(得分:3)
#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
答案 2 :(得分:2)
对Ctrl-C有特殊支持,由系统转换为信号。如果您希望程序在使用其他特定组合键时立即停止,则会更加困难。
您需要检查程序的标准输入,并且需要设置标准输入以使输入不被缓冲(否则在用户按下验证之前您将看不到任何输入“返回”)。后一部分将通过ioctl()
调用完成,并且不可移植;
您将需要线程或轮询,其中没有一个在C中非常适合。
在C中练习比这些更有趣。
答案 3 :(得分:2)
这篇文章回答了你的问题
答案 4 :(得分:1)
这将做你想要的:
stty intr ^a
./a.out
要获得额外的功劳,请使用适当的库函数,例如“stty intr ^ a”。 “man termios”。
答案 5 :(得分:0)
有人首先发布以下代码对我有用,但我不知道为什么他删除了他的答案。
原始链接: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);
}
答案 6 :(得分:0)
这是将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);
}
}
}
}