如何在C中按键退出while循环?

时间:2012-02-29 20:34:56

标签: c++ c while-loop

我希望用户按空格键跳出while循环。

例如:

while ( some condition )

{

printf ("Press space bar to continue...");

}

谢谢!

3 个答案:

答案 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.