web-dev-qa-db-ja.com

conio.hのgetch()のiostream.hの代替関数?

ヘッダーファイル<iostream.h>を使用して出力に画面を保持しようとしていますが、<conio.h><iostream.h>getch()clrscr()関数と同等の関数がわからない他のC++ライブラリ。そのような機能はありますか?

21
Aayush

_conio.h_関数は、言語のコンパイラ拡張機能であり、CまたはC++の一部ではありません。標準C++には直接の置き換えはありません。

Getch()の場合、int ch = std::cin.get();はおそらく最も近いものですが、これはバッファされた標準入力から読み取ることに注意してください。conio.hgetchはバッファなしの読み取りを行うと思います。

clrscr()の実装は非常にプラットフォームに依存します。すべての画面または端末がクリアの概念を持っているわけではなく、それらの機能にアクセスする方法が大幅に異なります。

端末を文字ストリームのセット以外のものとして扱う必要がある場合は、おそらく、基礎となる端末、画面、またはコンソールの詳細を隠すライブラリーを探すことをお勧めします。 UNIXishシステムを使用している場合は、cursesまたはncursesライブラリをご覧ください。他のOSについての提案は知りません。

28
Stephen Veiss

getch()およびclrscr()はC++で動作します。 conio.hを含める

ただし、(何らかの理由で)conio.hを含めることができない場合、

ユーザーにEnterキーを押すように要求する表示メッセージを含むcin >> dummy_varはどうですか?

8

cin.get()を使用してください。

7
anonymous

次の2つの関数を使用するだけです。

fflush(stdin);
getchar();

Visual StudioおよびDev C++では、iostreamヘッダーにこれが含まれているため、追加のヘッダーファイルを含める必要はありません。

4
bkmagnetron

これは私が通常使用するものです:

#include<iostream>
...
std::getchar();
3
CLearner

後期回答std::cin.get()を使用できます。これはほとんどのコンパイラで動作するはずです。それでもうまくいかない場合は、別のものを追加してみてください。

_int main () {

    // ...

    std::cin.get();
    std::cin.get();
    return 0x00;
}
_

system("PAUSE")の使用はWindowsでのみ利用可能で、 bad プログラミング habit です。その理由は、文字通りpausesまたはfreezesプログラムとは対照的です入力を待つだけです。すなわち。終了するキーを押します。

2
iKlsR

私はこれが古い質問であることを理解していますが、人々が同様の質問への答えを探しているかもしれないので、私は答えます。

_conio.h_は(古代の)WindowsおよびMS-DOS/PC-DOS Cライブラリであり、Windows/DOS環境で非常に基本的なベアメタルキーボード入力と処理に使用されています。

getch()clrscr()は両方ともこのヘッダーによる非標準の追加であり、標準のC関数で可能な場合は避ける必要があります。 getch()は通常、Cではscanf()fread()、C++では_std::cin_および_std::cin.get_に置き換えることができます。 clrscr()に関しては、最も近いものは次のとおりです。

_for(int i = 0; i < 100; i++)
{
    printf("\n");
}
_

OR:

* nix環境には_ncurses.h_もあります。 ここにリンクがあります それに関するいくつかの情報へ。

1
Mason Watmough

Conio.hのプラットフォーム固有の関数getch()には、2つの特別な機能があります。

  • エコーなし文字.
  • Unbuffered文字の読み取り。

エコーは、C/C++環境の外部の端末によって行われます。端末を操作することによってのみ制御できます。また、iostream.hヘッダーでバッファーなしのI/Oを取得することはほぼ不可能です。

したがって、iostream.hのみを使用してgetch()の近くに到達することはできません。

(例えば、termios.hを使用してエコーを無効にするなど、多くのgetch() implementationがあります。)

0
ManuelAtWork