ホームページ >バックエンド開発 >C++ >`isdigital(c)` は `char` または `int` 入力用に設計されていますか?詳細な検査。

`isdigital(c)` は `char` または `int` 入力用に設計されていますか?詳細な検査。

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 15:01:021017ブラウズ

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

isdigital(c) - 入力変数はどのようなデータ型でなければなりませんか?

はじめに:
の場合文字ベースの入力を扱う場合、指定された入力が数字であるかどうかを判断することが不可欠です。 isdigital() 関数はこの目的でよく使用されるツールですが、入力変数は文字 (char) であるべきですか、それとも整数 (int) であるべきですか?

文字入力とストリーム状態:
Cin は文字入力の読み取りに使用されます。ただし、入力を使用する前にストリームが有効かどうかを確認することが重要です。ストリームが閉じている場合、cin は入力変数を変更せずに戻り、初期化されないままにすることがあります。

isdigital() 規約と実装:
C 関数 isdigital() は整数を期待します。口論。この設計は、文字コードとエラー ステータスを示す int を返す元の C 関数 getchar() に由来しています。その結果、isdigital() は、入力が int にキャストされた unsigned char であると想定します。

Char の符号:
C では、プレーン char は、状況に応じて、符号付きまたは符号なしのいずれかになります。コンパイラの実装に関して。ほとんどの場合、署名されています。これにより、getchar() および isdigital() ファミリの関数を使用するときに互換性の問題が発生します。

signed char の負の値は EOF インジケーターの値と競合する可能性があり、重複や未定義の動作が発生する可能性があります。これを回避するには、入力を (unsigned char) としてキャストして isdigital() を呼び出す必要があります。

コード例:

<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>

以上が`isdigital(c)` は `char` または `int` 入力用に設計されていますか?詳細な検査。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。