isdigit(c) - 利用char 與int 進行輸入驗證
檢查程式碼時,旨在將使用者輸入驗證為數字,問題出現了:輸入變數類型應該是- char 還是int?
理解這個困境需要深入研究 C 中 isdigit 函數的複雜性。與它的名字相反,isdigit 需要一個整數參數,引起對 char 輸入相容性的擔憂。
解釋在於 C 的歷史,特別是 getchar(),它以整數形式檢索字元以容納字元代碼和錯誤代碼(表示 EOF 的負值)。這種設計會產生與 char 的相容性問題,根據編譯器的不同,char 可以是有符號的,也可以是無符號的。
有符號的 char 提出了一個挑戰,因為負值與 EOF 重疊,可能會導致錯誤。因此,isdigit 和相關函數需要將輸入視為無符號字元以確保積極性。
為了確保相容性,請按如下方式修改代碼:
<code class="c">if(isdigit((unsigned char)c))</code>
此外,驗證這一點至關重要輸入流在使用c 之前是有效的,因為關閉的流可能會使其未初始化。
以上是在 C 中我應該使用 char 還是 int 進行輸入驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!