KONOTI

この世界で得た知識・情報まとめ

【C++】キーボード入力を取得するgetchとgetchar関数

  • 作成日:2024/10/20

標準入力のcinを使わずにキーボードからの入力を取得する方法です。

getchとgetchar関数とは

どちらもキーボードからの入力を「1文字」取得する関数です。 取得するのは1文字なので、複数の文字を取得したい場合はループ処理が必須です。

getchとgetcharの違い

大きく2つの違いがあります。

1つ目は、文字の取得時のちがいです。 getcharは入力し終えたらEnterキーを押下することで文字を取得しますが、 getchは入力した瞬間に文字を取得します。

2つ目は、表示方法のちがいです。 getcharは入力したらその文字がコンソールに出力されますが、 getchは出力されません。

どっちを使う?

どちらを利用するかはケースバイケースですが、押下した瞬間に処理したい場合や、 コンソールに入力したものを出力させたくない場合はgetchが良いでしょう。

一方で、入力したものがわかるようにしておきたい場合はgetcharを使いましょう。

使い方

サンプルを用いて使い方を紹介します。

getch関数

以下のコードは1文字を取得する例です。

test.cpp

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
        char ch = getch();
        
        cout << "入力したもの:" << ch << endl;
    
        return 0;
    }
    

キーボードで「a」と入力した瞬間、以下のような結果が表示されます。

実行結果

入力したもの:a

getchar関数

以下のコードも1文字を取得する例です。

test.cpp

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
        char ch = getchar();
        
        cout << "入力したもの:" << ch << endl;
    
        return 0;
    }
    

キーボードで「a」と入力してEnterキーを押下すると、以下のような結果が表示されます。

実行結果

入力したもの:a

getchと違い、入力値がコンソールに出力されるのがわかるでしょう。

複数の文字を取得する

少し応用です。getchを使い複数の文字を取得してみましょう。 適当な文字列を入力してTabキー押下時に入力したものを出力する例です。

test.cpp

    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
        string tmp;
        char ch;
    
        while (1)
        {
            //1文字取得
            ch = getch();
    
            //文字連結
            tmp = tmp + ch;
    
            //Tabキーが押下された場合
            if (GetAsyncKeyState(VK_TAB))
            {
                break;
            }
        }
        cout << "入力したもの:" << tmp << endl;
    
        return 0;
    }
    

キーボードで「abcdef」と入力してTabキーを押下すると、以下のような結果が表示されます。

実行結果

入力したもの:abcdef

15行目で1文字取得し、それを文字列tmpに格納しています。 キーが押下されたかどうかはGetAsyncKeyState関数を使います。 今回は引数にTabを指定していますね。

Tabが押下されるまでは文字の取得・連結を繰り返すコードになっています。

ちなみに、getcharだとEnterキーを押下しないと文字取得ができないため、 このサンプルではうまく動かないのでご注意ください。

getch関数が使えない?

端的に書きますが、私の環境ですとeclipceのコンソールだとgetchがうまく動作しませんでした。 他の環境は未調査ですが、VSCだと正常に機能したのでgetchが使えない場合は別の開発環境を試してみると良いでしょう。

この記事のシェアはこちらから

当サイトについて

当サイト(KONOTI)は、日常生活において運営者が得た情報をご紹介するサイトです。 ジャンルに多少の偏りはありますが、基本的には様々な情報を取り扱っていく予定です。

Contact

当サイトへのご連絡は以下よりお願いします。

PAGE TOP ▲

© Copyright 2024 KONOTI