Is isdigital() 関数は Char または Int 入力を対象としていますか?
提供されたコード スニペットでは、if 条件で isdigital() が使用されています。入力された文字が数字であるかどうかを判断します。ただし、適切な入力変数の型 (char または int) に関して疑問が生じます。
C の起源を詳しく調べる
int 入力の選択を理解するには、以下を詳しく調べる必要があります。 isdigital() の起源は C です。この関数は getchar() と連携するように設計されており、文字を int として読み取り、文字とエラーの両方を提供します。コード。負の値はエラーを示し、正の値は文字コードを表します。
Signed vs Unsigned Char
この設定では、char に関するジレンマが発生します。char は、状況に応じて、符号付きまたは符号なしのいずれかになります。実装について。ほとんどのシステムはデフォルトで signed char を採用しているため、getchar() のエラー コード規則 (負の値) と衝突する可能性があります。
isdigital() の型変換
この問題に対処するために、isdigital() は unsigned char を表す int の入力を期待します。したがって、正しい if 条件は次のようになります。
if(isdigit((unsigned char)c))
追加の考慮事項
char-int の難題を超えて、c にアクセスする前にストリームの閉鎖を確認することが重要です。これにより、ストリームがまだ有効であり、c の値が適切に割り当てられていることを確認できます。
概要
最初のコードは間違っているようには見えないかもしれませんが、コードの複雑さを見落としています。 char の符号と isdigital() の入力要件。入力を unsigned char にキャストすることで、関数の規約に従い、潜在的な未定義の動作を回避します。
以上が`isdigital()` は `char` または `int` 入力を取る必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。