我希望用户按空格键跳出while循环。
例如:
while ( some condition )
{
printf ("Press space bar to continue...");
}
谢谢!
答案 0 :(得分:3)
我认为您的意思是以下内容,只要根据上面的评论,输入键后面的空格键是可以接受的。
char input = 0;
while( input != ' ' )
{
printf("Press space bar to continue...\n");
scanf("%c",&input);
}
如果您愿意,可以不按Enter键:
#include <stdio.h>
int main(int argc, char **argv)
{
char input = 0;
while( input != ' ' )
{
printf("Press space bar to continue...\n");
input = getch();
}
}
这适用于我的msysgit bash shell。但有些人会坚持认为它也能在Linux上运行。哪个好我猜,我喜欢Linux,但我说上面的解决方案适用于 msysgit 。以下是我的工作,让我具体说一下,Oracle VM for Ubuntu 10.10。
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char input = 0;
while( input != ' ' )
{
printf("Press space bar to continue...\n");
input = mygetch();
}
}
int mygetch(void)
{
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
mygetch
来自here。
答案 1 :(得分:1)
在大多数平台下捕获击键需要您直接访问控制台。通常有一些库可以帮助您。低级库是termcap(源自终端功能)库。在termcap之上有一个名为curses的“可移植”层。 Linux使用名为ncurses的GNU版本,实际上可以在多种平台上使用。
Curses已被广泛记录,您可以使用
开始教程$ man ncurses
您的问题需要步骤来初始化控制台并设置击键读卡器。有几种方法可以达到预期的效果。
我发布了一个可供你玩的实例。它显示了诅咒中的一些基本想法:
/* file: curses_ex1.c */
#include <stdio.h>
#include <curses.h>
const char rotary[4] = "/-\\|";
int main() {
WINDOW *w;
int i = 0;
w = initscr();
if ( w == NULL ) {
return -1; /* unable to initialize curses */
}
timeout(500); /* do not block */
mvprintw(0, 0, "Press space bar to break out of the loop.");
noecho();
for(i = 0; ; i++) { /* no condition so loops forever */
int c;
mvaddch(0, 42, rotary[i%4]); /* display rotator */
c = getch(); /* get a character */
if ( c == ' ')
break;
if ( c != ERR ) { /* not a space but another valid key */
mvprintw(1, 0, "You need to press a space for me to stop (you pressed `%c')", c);
}
}
endwin();
return 0;
}
编译它:
cc -o curses_ex1 curses_ex1.c -lcurses
答案 2 :(得分:-2)
使变量x = 1,将其置于条件中,当按空格键时,将x设置为2.