だから私は現在、ユーザーのテキスト入力を受け取るプログラムの一部を書いています。アルファベット以外のすべての入力文字を無視したいので、std :: isalpha()がこれを行うための良い方法であると考えました。残念ながら、私が知る限り、2つのstd :: isalpha()関数があり、一般的な関数はロケール固有の関数から明確にする必要があります。
(int(*)(int))std::isalpha()
明確にしないと、std :: isalphaは大文字を読み取るとtrueを返すように見えますが、小文字を読み取るとfalseを返すようです(ただし、戻り値を直接出力すると、非英字の場合は0、大文字の場合は1、小文字の場合は2)。だから私はこれをする必要があります。
以前に別のプログラムでこれを行ったことがありますが、何らかの理由で、このプロジェクトで「ISOC++禁止」エラーが発生することがあります。注意してください、たまにだけ。これがコードの問題のある領域です(これは間に何も入れずに一緒に表示されます):
std::cout << "Is alpha? " << (int(*)(int))std::isalpha((char)Event.text.unicode) << "\n";
if ( (int(*)(int))std::isalpha((char)Event.text.unicode) == true)
{
std::cout << "Is alpha!\n";
//...snip...
}
戻り値をstd::coutに送信する最初のインスタンスは、正常に機能します-これに対してエラーは発生せず、期待値(非アルファの場合は0、アルファの場合は1)を取得し、それが唯一の場所である場合曖昧さを解消してみてください。プログラムはコンパイルされ、正常に実行されます。
ただし、2番目のインスタンスはこれをスローします。
error: ISO C++ forbids comparison between pointer and integer
(int(*)(int))スニペットを削除した場合にのみコンパイルされ、その時点で不正な動作が発生します。誰かがここで私を教えてもらえますか?