首頁 >後端開發 >C++ >`isdigit(c)` 是為 `char` 或 `int` 輸入設計的嗎?詳細檢查。

`isdigit(c)` 是為 `char` 或 `int` 輸入設計的嗎?詳細檢查。

Susan Sarandon
Susan Sarandon原創
2024-10-29 15:01:021019瀏覽

Is `isdigit(c)` Designed for `char` or `int` Input? A Detailed Examination.

isdigit(c) - 輸入變數應該是什麼資料型態?

簡介:
何時使用基於字元的輸入時,確定給定輸入是否是數字至關重要。 isdigit() 函數是用於此目的的常用工具,但它提出了一個問題:輸入變數應該是字元 (char) 還是整數 (int)?

字元輸入和流State:
Cin 用於讀取字元輸入。但是,在使用輸入之前檢查流是否有效至關重要。如果流關閉,cin 可能會返回而不修改輸入變量,使其處於未初始化狀態。

isdigit() 合約與實作:
C 函數 isdigit() 需要一個整數爭論。這種設計源自於原始的 C 函數 getchar(),它會傳回一個 int 來指示字元程式碼和錯誤狀態。因此,isdigit() 假定輸入是一個 unsigned char 轉換為 int。

Char 的符號性:
在 C 中,普通 char 可以是有符號的,也可以是無符號的,取決於關於編譯器的實作。在大多數情況下,它是簽署的。這在使用 getchar() 和 isdigit() 系列函數時引入了相容性問題。

signed char 中的負值可能與 EOF 指示符值衝突,導致潛在的重疊和未定義的行為。為了避免這種情況,應該呼叫 isdigit(),並將輸入強制轉換為(無符號字元)。

程式碼範例:

<code class="c++">#include <iostream>
#include <ctype.h>

int main()
{
    char c;

    cout << "Please enter a digit: ";
    cin >> c;

    if (isdigit((unsigned char)c))
        cout << "You entered a digit" << endl;
    else
        cout << "You entered a non-digit value" << endl;

    return 0;
}</code>

以上是`isdigit(c)` 是為 `char` 或 `int` 輸入設計的嗎?詳細檢查。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn