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