Maison >développement back-end >C++ >Est-ce que `isdigit(c)` est conçu pour l'entrée `char` ou `int` ? Un examen détaillé.

Est-ce que `isdigit(c)` est conçu pour l'entrée `char` ou `int` ? Un examen détaillé.

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 15:01:021019parcourir

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

isdigit(c) - Quel type de données doit être la variable d'entrée ?

Introduction :
Quand En travaillant avec une saisie basée sur des caractères, il est essentiel de déterminer si une saisie donnée est un chiffre. La fonction isdigit() est un outil couramment utilisé à cet effet, mais elle soulève la question : la variable d'entrée doit-elle être un caractère (char) ou un entier (int) ?

Saisie de caractères et flux État :
Cin est utilisé pour lire la saisie de caractères. Cependant, il est crucial de vérifier si le flux est valide avant d'utiliser l'entrée. Si le flux est fermé, cin peut revenir sans modifier la variable d'entrée, la laissant non initialisée.

Contrat et implémentation isdigit() :
La fonction C isdigit() attend un entier argument. Cette conception provient de la fonction C originale getchar(), qui renvoie un int pour indiquer les codes de caractères et l'état d'erreur. Par conséquent, isdigit() suppose que l'entrée est un caractère non signé converti en int.

Signature du caractère :
En C, un caractère simple peut être signé ou non signé, selon sur l'implémentation du compilateur. Dans la plupart des cas, c'est signé. Cela introduit un problème de compatibilité lors de l'utilisation de getchar() et de la famille de fonctions isdigit().

Les valeurs négatives dans les caractères signés peuvent entrer en conflit avec la valeur de l'indicateur EOF, provoquant un chevauchement potentiel et un comportement indéfini. Pour éviter cela, isdigit() doit être appelé avec l'entrée convertie en (unsigned char).

Exemple de code :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn