Quelle est la façon la plus simple de l'utilisation d'appel isdigit() et isalpha() commandes?
J'ai besoin d'une brève explication sur la façon dont les deux commandes isdigit()
et isalpha()
travail. Bien sûr, j'ai lu des sources en ligne, avant de poser la question, mais je les ai essayé et je ne pouvais pas les faire travailler. Quelle est la façon la plus simple de les utiliser?
Je sais qu'il donne en retour une valeur, donc je suppose que je peux l'utiliser comme ceci:
if(isdigit(someinput)==1)
return -1;
Est-ce exact? Puis-je l'utiliser pour n'importe quel type de personnage? Et je peux comparer avec un nombre à virgule ou un tableau?
Suppose, je veux scanf un fichier texte qui comporte des chiffres et de lettre et de déterminer ce que je suis à la numérisation. Ces deux commandes être utilisés dans ce contexte?
Vous devez vous connecter pour publier un commentaire.
Ils ne sont pas des "commandes", ils sont des fonctions. Fonctions acceptent des arguments et valeurs de retour.
C'est la signature de la
isdigit
fonction: il indique qu'il va accepter uneint
valeur (ou quelque chose qui peut être jeté àint
, comme unchar
), et sera de retour uneint
. Vous ne pouvez pas, par conséquent, passer un tableau (si on peut appeler ça sur chaque membre d'uneint[]
).La signature de
isalpha
est identique (sauf pour le nom, évidemment).La documentation dit le texte suivant:
Cela signifie que votre comparaison ne sera pas correct pour toutes les implémentations. De mieux à faire quelque chose comme:
En C, 0 évaluera à
false
dans une expression booléenne, et toutes les valeurs non nulles évaluer àtrue
. Si cette case permettra de couvrir les implémentations deisdigit
qui renvoie -1, 5, quelle que soit.Si vous souhaitez appliquer ces valeurs dans un fichier texte, vous devez lire le texte un caractère à la fois et de passer les caractères que vous recevez à ces méthodes.
char
, juste le convertir en uneint
. Si vous voulez convertir dans le caractère'5'
à la valeur de l'entier 5, vous pouvez le faire'5' - '0'
(cela permettra de soustraire la valeur ascii de'0'
de celle de'5'
; la différence sera5
).isxxx()
fonctions définies dans<ctype.h>
prendre unint
argument, mais ne sont définies que pour une gamme restreinte de ce type: l'argument valide les valeurs sont toutes les valeurs de typeunsigned char
et la valeur spécialeEOF
. Le passage d'unchar
sur une architecture oùchar
est signée par défaut invoque un comportement indéfini pour la plupart négatifs char valeurs et peut retourner des résultats incorrects pour certains. Unchar
argument doit être jeté comme(unsigned char)
pour un fonctionnement sûr.Vous ne pas normalement pour comparer la valeur de retour, juste le traiter comme une valeur Booléenne:
Si vous insistez pour faire une comparaison, il doit être
!=0
, mais c'est entièrement redondant et inutile.Vous l'utilisez sur caractères qui ont été lues à partir de l'entrée, qui ne sont pas (pour l'instant) de flotteurs ou de quoi que ce soit, juste des groupes de caractères. Dans le cas d'un flotteur, certains de ceux qui vont être des chiffres, mais de nombreux comprendra également des points décimaux (qui ne sont pas des chiffres) et éventuellement d'un occasionnel
e
,+
ou-
ainsi.Également noter que, normalement, vous devez effectuer un cast de l'entrée à
unsigned char
avant l'appel de lais*
fonctions. De nombreux jeux de caractères permettra de traiter certains caractères comme négatifs lorsqu'ils sont considérés commesigned char
, et en passant une valeur négative à l'une de ces donne un comportement indéfini.isdigit
ouisalpha
-- c'est aujourd'hui un nombre, pas un chiffre ou un caractère alphabétique.Vous pouvez l'utiliser pour n'importe quel char type! (en fait, elle est de type int, je ne sais pas si c'est pour des raisons de compatibilité ou autres joyeusetés, mais l'utilisation la plus courante est pour les personnages)
Il permettra de déterminer si, par exemple, '5' est un chiffre ou une alphanumérique (partie de l'alphabet). Et oui, votre utilisation est correcte si
someInput
est de type "char"isxxx()
fonctions sont définies comme uneint
et peut être transmis toutes les valeurs retournées pargetchar()
,getc()
etfgetc()
, c'est-à toutes les valeurs de typeunsigned char
plus la valeur spécialeEOF
, et pas d'autres.