2017-01-25 56 views
0

コマンドプロンプトプログラムをsystem("pause")のように待機させ、特定のキーを受け入れた後にのみ実行を続ける機能はありますか?C++ - 特定のキーが押されるまでプログラムを一時停止する

+2

あなたは[ncursesベース]でご覧になる場合がありますhttps://www.gnu.org/ソフトウェア/ ncurses /) – George

+0

一度に1行ずつコードをステップ実行するような意味ですか? – ArmenB

+1

C++標準ライブラリにはありません。 –

答えて

2

改行文字を待っている場合は、それを行うための簡単でポータブルな方法があります。ちょうどgetlineを使用してください。

改行を最初に受け取らずに他の文字を受け取りたい場合、物事は移植性が低くなります。 Unixシステムでは、端末を「rawモード」に設定する必要があります。 Georgeさんのコメントによれば、ncursesはこれを行う簡単な方法です。さらに、端末の特定の場所に物を描き、任意のキーを受け取るなどの便利な機能を提供します。

Windowsでは、 console interface。これは、もちろん、Windowsの外部では使用できません。

Neil Butterworthのコメントとして、PDCursesと呼ばれるWindows用のcursesもあります。 UnixとWindowsの両方で動作するソフトウェアを作成する必要がある場合、それは追求するための良いオプションです。

+1

cursesはWindowsでも利用できます - http://pdcurses.sourceforge.net/ –

0

getlineとncursesがうまく動作しない場合は、常にconio.hとgetch()があります。この回答で説明されているようにこれにいくつかの問題があります。Why can't I find <conio.h> on Linux?

幸運。

0

コンソールのインターフェイスgetche()関数は、さらなる実行の前にキーストロークを待つでしょう。

+0

あなたは私の質問を誤解しているようです。私が知りたいのは、getch()と似た関数があるが、特定のキーに対してのみ機能するということだ。 – Twilight053

0

Windowsの場合は、Microsoftランタイムライブラリの一部であるkbhit()を使用できます。あなたは、Linuxを使っている場合は、手順をコンパイルするため

#include <stdio.h> 
#include <termios.h> 
#include <unistd.h> 
#include <fcntl.h> 

int kbhit(void) 
{ 
    struct termios oldt, newt; 
    int ch; 
    int oldf; 

    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON | ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0); 
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); 

    ch = getchar(); 

    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    fcntl(STDIN_FILENO, F_SETFL, oldf); 

    if(ch != EOF) 
    { 
    ungetc(ch, stdin); 
    return 1; 
    } 

    return 0; 
} 

をkbhitを実装することができます

gcc -o kbhit kbhit.c 

./kbhit 

で実行すると、それはキー入力を求めるプロンプトが表示されます、そしてときに終了しますキーを押します(Enterキーまたは印刷可能なキーに限定されません)。

(ガットインターネット上で - あなたは、コードを変更し、Enterキーのために\ nのように、特定のchの値を使用することができます)(

関連する問題