Maison > développement back-end > C++ > « isdigit() » devrait-il prendre une entrée « char » ou « int » ?

« isdigit() » devrait-il prendre une entrée « char » ou « int » ?

Linda Hamilton
Libérer: 2024-10-31 13:24:02
original
423 Les gens l'ont consulté

 Should `isdigit()` Take a `char` or `int` Input?

La fonction isdigit() est-elle destinée à l'entrée Char ou Int ?

Dans l'extrait de code fourni, la condition if utilise isdigit() pour déterminer si le caractère saisi est un chiffre. Cependant, la question se pose concernant le type de variable d'entrée approprié : char ou int.

Plonger dans les origines du C

Pour comprendre le choix de l'entrée int, nous devons nous plonger dans Les origines d'isdigit() en C. La fonction a été conçue pour fonctionner avec getchar(), qui lit les caractères comme des entiers pour fournir à la fois le caractère et un code d'erreur. Les valeurs négatives indiquent des erreurs, tandis que les valeurs positives représentent des codes de caractères.

Charactère signé ou non signé

Cette configuration présente un dilemme avec le caractère, qui peut être signé ou non signé selon sur la mise en œuvre. La plupart des systèmes adoptent le caractère signé par défaut, ce qui entraîne des conflits potentiels avec la convention de code d'erreur de getchar() (valeurs négatives).

Conversion de type pour isdigit()

Pour résoudre ce problème, isdigit() attend une entrée int qui représente un caractère non signé. Par conséquent, la condition if correcte devrait être :

if(isdigit((unsigned char)c))
Copier après la connexion

Considérations supplémentaires

Au-delà de l'énigme char-int, il est crucial de vérifier la fermeture du flux avant d'accéder à c. Cela garantit que le flux est toujours valide et que la valeur de c a été correctement attribuée.

Résumé

Bien que le code initial ne semble pas incorrect, il ignore les subtilités de la signature de char et les exigences d'entrée de isdigit(). En convertissant l'entrée en un caractère non signé, nous adhérons au contrat de la fonction et évitons un comportement potentiel non défini.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal