私はスペースキーを押して、whileループから飛び出したいと思っています。例えばCのキーストロークでwhileループを終了するにはどうすればよいですか?
:
while (some condition)
{
printf ("Press space bar to continue...");
}
感謝!!
私はスペースキーを押して、whileループから飛び出したいと思っています。例えばCのキーストロークでwhileループを終了するにはどうすればよいですか?
:
while (some condition)
{
printf ("Press space bar to continue...");
}
感謝!!
できる状態では、xを設定することを置きますあなたのコメントを与えてください。
char input = 0;
while(input != ' ')
{
printf("Press space bar to continue...\n");
scanf("%c",&input);
}
それとも、エンターキー押すことなく、好む場合:
#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シェルに取り組みました。しかし、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です。
これは動作しません...スペースキーとそれに続くEnterキーが必要です。 –
助けてくれてありがとう、しかしコードはコンパイルされません – eastboundr
"%c"のように思えます – eastboundr
、変数x = 1を作る彼らはスペースバーを押したときに、私はあなたがいる限り、Enterキーに続いて、スペースバーが許容されるよう、以下の意味だと思う2.
しかし、どのようにキーストロークをキャッチしますか?ありがとう – eastboundr
@eastboundrこれは、あなたが尋ねた質問とはまったく異なる質問です。この回答のコメントは、あなたがそれを求めるべき場所ではありません。 – meagar
-1、ありますか?これは役立ち、妥当な答えです。 – macduff
ほとんどのプラットフォームでキーストロークをキャプチャするには、コンソールに直接アクセスする必要があります。典型的には、それを手助けするライブラリがあります。低レベルのライブラリはtermcap(端末機能から得られる)ライブラリです。 termcapの上にcursesという "portable"レイヤーがあります。 Linuxはncursesと呼ばれるGNUバージョンを使用しており、実際には多数のプラットフォームで利用できます。
呪いが広範囲に文書化されて、あなたは
$ 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
は、プラットフォーム固有のコードを必要としますが、言われていませんあなたが使っているプラットフォームは何ですか?読み込みをブロックするかどうか、ユーザーがキーを押すのを待つか、コードを実行したい、キーストロークを今すぐ確認する、そしてそのループを終了するユーザーはキーを押しますか? –
申し訳ありませんが、そのlinux。実際にキーを入力してもOKです – eastboundr
コンソールまたはウィンドウ(GUI)アプリケーションをビルドしていますか? – Vyktor