質問

どこか昔、大学で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()を使用しないのはなぜですか?

エラーが示すように、名前 getch()は推奨されません(Microsoft固有の拡張機能であったため)。代わりに _getch()が推奨されます。 POSIXがどこに入ってくるのかわかりません。 POSIXは getch()を定義せず、代わりにを組み込みますgetchar() = "nofollow noreferrer"> ISO C標準(298ページ、最終標準が無料ではないため、下書きにリンク)。解決策は、提案どおりに実行して _getch()を使用するか、標準C 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」が出力されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top