質問
どこか昔、大学でCやC ++をやったことがありますが、C ++にあまり注意を向けることはありませんでした。今、C ++に注意を払いたいのですが、 getch()
関数を使用しているときに、下から警告が表示されます。
警告C4996: 'getch':このアイテムのPOSIX名は廃止されました。代わりに、ISO C ++準拠の名前_getchを使用します。詳細については、オンラインヘルプを参照してください。
現在、VS 2005 Expressを使用していますが、この警告についてどうすればよいかわかりません。エラーメッセージまたはキーヒットが必要な何かを printf()
した後、 getch()
を使用する必要があります。
それで私を助けてもらえますか?
解決
Microsoftは、アンダースコアなしで名前をマークすることにしました。これらの名前はプログラマーが選択するために予約されているためです。実装固有の拡張機能は、CまたはC ++標準に準拠する場合は、グローバル名前空間でアンダースコアで始まる名前を使用するか、POSIX / ANSI / ISO Cなどの標準に準拠した複合環境としてマークする必要があります。関数はそれらの標準の1つに対応します。
getcwd()に関するこの回答を読むもちろん、PJ Plaugerが説明をしてくれました。PJPlaugerは、もちろん物事をよく知っています。
ユーザーが入力したキーを待つだけの場合、 getchar
を使用しない理由はありません。ただし、ユーザーが _getch
や友人を使用する方が実用的で便利な場合もあります。ただし、これらはCまたはC ++標準では指定されていないため、プログラムの移植性が制限されます。それを覚えておいてください。
他のヒント
C ++に興味があるなら、なぜ printf
と getch
なのですか?代わりに cout
と cin.get
の使用を検討してください。
getch()の代わりに_getch()を使用します
なぜこれが必要なのですか?単一の文字をキャプチャする必要がある場合、 getchar()
を使用しないのはなぜですか?
" std :: getc(stdin);"を使用できます。 「getch();」のように機能します私のプログラムで。 'getch()'の代わりになると思います 間違っている場合は教えてください。
#include <cstdio>
switch (std::getc(stdin)) {
case 'a': cout << 'a' << endl ; break;
case 'b': cout << 'b' << endl ; break;
default: cout << '
コンソールで「a」を入力すると、「a」が出力されます。
<< endl; break;
}
コンソールで「a」を入力すると、「a」が出力されます。