如果我有一个while循环,我只想在按下q键时停止,我该怎么做。 但是,我不希望它完全是程序
#define TRUE 1
#define FALSE 0
typedef int boolean;
int main(int argc,char* argv[]){
char *script = malloc(MAXPATH);
script = "ls";
boolean a;
a = TRUE;
while(a){ //this is the while loop i want to break incase of a keypress
system(script);
}
do something else
something else....
这将在Mac OS X上运行。
getchar()和getc()都会暂停以使循环停止的响应
答案 0 :(得分:2)
您可以在UNIX-LIKE OS中使用select()机制。
一体化功能:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/select.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
fd_set readfds;
struct timeval tv;
int ch;
int bool, ret;
FD_ZERO(&readfds);
bool = 1;
while (bool) {
FD_SET(STDIN_FILENO, &readfds);
tv.tv_sec = 0;
tv.tv_usec = 0;
/* int select(int nfds, fd_set *readfds, fd_set *writefds,
* fd_set *exceptfds, struct timeval *timeout); */
ret = select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv);
if (ret < 0) {
perror("select error");
exit(1);
} else if (ret == 0) {
/* timeout */
} else if (FD_ISSET(STDIN_FILENO, &readfds)) {
ch = fgetc(stdin);
if (ch == 'q') {
bool = 0;
}
}
sleep(1);
fprintf(stderr, ".");
}
return 0;
}
答案 1 :(得分:1)
C中用于检测按键的本机函数是:
getchar() and getc()
kbhit() is a function returns integer value whenever the key is pressed
您可以使用上述功能
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
int main()
{
int m;
clrscr();
do
{
if(kbhit())
{
if((m=getch())==97)
{
printf("Key a is pressed....\n");
}
}
} while(1);
getch();
return 0;
}
答案 2 :(得分:1)
我为alexchandel的回答感到高兴。我从未听说过poll()
对于像提问者平台这样的POSIX风格系统,poll()是一个很好的答案
_kbhit()是MS Windows上最简单的答案。他们的民意调查()当然是不同的
1表示我的列表中只有一个描述符块,100表示毫秒时间
我的文件句柄是{0,对于stdin
阅读可以查询的许多事件的手册页,我只想要POLLIN
#include <stdio.h>
#include <poll.h>
#include <errno.h>
static struct pollfd attention = { 0, POLLIN } ;
int main()
{
int x, y;
for (;;)
{
x = poll(&attention, 1, 100);
if (x < 0)
{
printf("problem %d\n", errno);
break;
}
else if (x)
{
printf("you rang %x ?", x);
y = getc(stdin);
printf(" %c of course\n", y);
if (y == '.') break;
}
}
return 0;
}
答案 3 :(得分:0)
当主循环在stdin上读取char时,可以使计算在pthread中运行。如果您不想从stdin读取char,则SDL库具有更好的输入控件。 gtk也有窗口接收的事件。命令“xev”是一个用于linux的xlib程序,其工作方式类似。它打开一个空白窗口,它会在它们到来时读取关键事件。