私は非常に古い Turbo C++ 3.0 コンパイラを使用しています。
このコンパイラを使用しているうちにgetch()
、 、getche()
そして最も重要なclrscr()
.
今、私は Visual C++ 2010 Express を使い始めました。これらの関数のほとんど (私はこれを見つけました) は非標準であり、Visual C++ では使用できないため、これは多くの問題を引き起こしています。
私は今何をすべきですか?
私は非常に古い Turbo C++ 3.0 コンパイラを使用しています。
このコンパイラを使用しているうちにgetch()
、 、getche()
そして最も重要なclrscr()
.
今、私は Visual C++ 2010 Express を使い始めました。これらの関数のほとんど (私はこれを見つけました) は非標準であり、Visual C++ では使用できないため、これは多くの問題を引き起こしています。
私は今何をすべきですか?
可能であれば常にそれらを回避するか、代替手段を試してください。
for getch() --- cin.get()
clrscr -- system("cls") // try avoiding the system commands. check : [System][1]
その他の場合は、それらを検索できます。
本当の問題は、あなたが世界的に何をしようとしているのかです。
getch
ポータブルではありclrscr
ませんでした。コンソール ウィンドウでマスクまたはメニューを作成しようとしている場合は、curses
orを調べる必要がありますncurses
。これらは、そのようなものに対する移植可能なソリューションを提供します。ページングだけの場合は、多数の'\n'
(for clrscr
) とstd::cin.get()
forを単純に出力するだけで済む可能性がありgetch
ます。(ただし、これはユーザーが新しい行を入力したときにのみ返されることに注意してください。行の 1 文字のみを読み取り、残りはバッファーに残しますgetch
。
選択肢。)std::getline
std::cin::ignore
いくつかの可能性を追加します:
まず、Joachim Pileborg がコメントで示唆したように、移植性が問題である場合、実行しようとしているものの多くにプラットフォーム固有の機能が存在する可能性があります。あなたが気にかけているのが Windows のことだけなら (他の場所では動作しないため、Windows はおそらくそうですsystem(
"cls" )
) getch()
、彼のコメントは十分な答えかもしれません。
次に、多くのコンソール (xterm や Windows のコンソール ウィンドウを含む) では、エスケープ シーケンス"\x1b""2J"
によって画面がクリアされます。(2 つの別個の文字列リテラルとして入力する必要があることに注意してください。そうしないと、最初の文字が 0x1b2 という不可能な 16 進値を持つ 2 つの文字として解釈されるためです。) ただし、リダイレクトとフラッシュの可能性がある問題を忘れないでください。
最後に、自明ではないことをしている場合は、調べる必要がありますcurses
(またはncurses
、同じことですが、実装が異なります)。実行するにはもう少し手間がかかります (明示的な初期化などが必要です) が、必要なことgetch
を正確に実行する関数があり、カーソルを明示的に配置する関数などもあります。これにより、コードを作成することもできます。より簡単です。(オリジナルcurses
は、UCB でオリジナルのエディターをサポートするためvi
に開発されました。独自のウィンドウで開発されていないエディターのようなタスクは、それから非常に恩恵を受けるでしょう。)
良い、
皆さん、私はどこでも使用できる最高のソリューションを見つけました。
clrscr() と gotoxy() の定義をググって、ヘッダー ファイルを作成し、これらの定義を追加しました。したがって、このファイルを含めて、以前に行っていたすべてのことを行うことができます。
しかし、私も質問があります。
windows.h が定義に含まれています。ファイルをコンパイルしてexeファイルを作成するとします。その後、Linuxマシンで実行できますか?
私によると、答えはイエスでなければなりません。しかし、私が間違っている場合は教えてください。また、なぜ私が間違っているのか教えてください。