web-dev-qa-db-ja.com

getchは非推奨です

昔、大学でCとC++をやっていましたが、C++にはあまり注目されていませんでした。ここでC++に注意を払いたいのですが、getch()関数を使用していると、以下から警告が表示されます。

警告C4996: 'getch':このアイテムのPOSIX名は非推奨です。代わりに、ISO C++準拠の名前_getchを使用してください。詳細については、オンラインヘルプを参照してください。

現在、VS 2005 Expressを使用していますが、この警告をどうすればよいかわかりません。エラーメッセージなど、キーを押す必要があるものをgetch()した後、printf()を使用する必要があります。

それを手伝ってくれませんか。

16
Duncan Benoit

これらの名前はプログラマーが選択できるように予約されているため、Microsoftはアンダースコアを廃止せずに名前をマークすることにしました。実装固有の拡張機能は、CまたはC++標準に準拠する場合は、グローバル名前空間でアンダースコアで始まる名前を使用する必要があります。または、POSIX/ANSI/ISO Cなど、標準に準拠した複合環境としてマークする必要があります。関数は、これらの標準の1つに対応します。

もちろん、物事をよく知っているP. J. Plaugerによる説明については、 getcwd() に関するこの回答も読んでください。

ユーザーが入力したいくつかのキーを待つことだけに関心がある場合は、getcharを使用しない理由は実際にはありません。ただし、ユーザーが_getchやその仲間を使用する方が実用的で便利な場合もあります。ただし、これらはCまたはC++標準で指定されていないため、プログラムの移植性が制限されます。心に留めておきます。

C++に興味があるなら、なぜprintfgetchなのですか?代わりにcoutcin.getの使用を検討してください。

9
Eli Bendersky

getch()の代わりに_getch()を使用します

5
shahzaib

エラーが示すように、名前getch()は非推奨になり(Microsoft固有の拡張子であったため)、代わりに_getch()が推奨されます。 POSIXがどこに入るのかわかりません。 POSIXはgetch()を定義しませんが、代わりに ISO C標準 で指定されているように getchar() を含みます。 )(298ページ、最終標準が無料ではないため、ドラフトがリンクされています)。解決策は、提案どおりに実行して_getch()を使用するか、標準のC getchar()を使用することです。

4
Brian Campbell

なぜこれが必要なのですか?単一の文字をキャプチャする必要がある場合は、getchar()を使用してみませんか?

3
dirkgently

「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 << '$' << endl; break;
}

コンソールで「a」を入力すると「a」が出力されます。

0
Imali7 ARF