2010-05-11 18 views
2

J'ai besoin d'une brève explication sur la façon dont fonctionnent les deux commandes isdigit() et isalpha(). Bien sûr, j'ai lu des sources en ligne avant de poser la question, mais je les ai essayées et je n'ai pas réussi à les faire fonctionner. Quelle est la manière la plus simple de les utiliser?Quelle est la manière la plus simple d'utiliser les commandes isdigit() et isalpha()?

Je sais qu'il redonne 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 puis-je le comparer avec un nombre flottant ou un tableau?

On suppose, je veux Scanf un fichier texte qui contient des chiffres et des lettres et de déterminer ce que je suis la numérisation. Ces deux commandes peuvent-elles être utilisées dans ce contexte?

Répondre

1

Ce ne sont pas des "commandes", ce sont des fonctions. Les fonctions acceptent les arguments et retournent les valeurs.

#include <ctype.h> 
int isdigit(int ch); 

C'est la signature de la fonction isdigit: il indique qu'il acceptera une valeur int (ou quelque chose qui peut être jeté à int, comme un char), et renvoie un int. Vous ne pouvez donc pas lui passer un tableau (bien que vous puissiez l'appeler sur tous les membres d'un int[]).

La signature pour isalpha est identique (sauf pour le nom, évidemment).

La documentation dit le texte suivant:

Description: La fonction isalpha() renvoie une valeur non nulle si son argument est une lettre de l'alphabet. Sinon, zéro est renvoyé.

Cela signifie que votre comparaison ne sera pas correct pour toutes les implémentations. Mieux vaut faire quelque chose comme:

if (isdigit(someinput)) { 
return -1; 
} 

En C, 0 évaluera à false dans une expression booléenne, et toutes les valeurs non nulles à évaluer true. Donc, cette vérification couvrira les implémentations de isdigit qui renvoient -1, 5, peu importe.

Si vous souhaitez appliquer ces valeurs dans un fichier texte, vous devez lire le texte d'un caractère à la fois et passer les caractères que vous recevez à ces méthodes.

+0

Merci! Donc, je ne peux utiliser cela que pour comparer un seul personnage? – NLed

+0

Une invocation de cette fonction prendra un seul caractère, mais bien sûr vous pouvez répéter si nécessaire. – danben

+0

Merci de répondre, une dernière question offtopic ... Quelle est la méthode pour convertir un personnage en nombre? – NLed

0

Vous pouvez l'utiliser pour tout type char! (en fait c'est int, je ne sais pas si c'est pour des raisons de compatibilité ou autre, mais l'usage le plus commun est pour les caractères)

Il va déterminer si par exemple '5' est un chiffre ou un alphanumérique (partie de l'alphabet).Et oui, votre utilisation est correcte si someInput est de type « char »

+0

Merci de votre réponse :) – NLed

+0

Hey, pas de problème! C'est pour ça que je suis là! – LukeN

+1

Les fonctions 'isxxx()' sont définies comme prenant un 'int' et peuvent être passées à toutes les valeurs retournées par' getchar() ',' getc() 'et' fgetc() ', toutes les valeurs de type' unsigned char' plus la valeur spéciale «EOF», et pas d'autre. – chqrlie

2

Vous ne pas veulent normalement de comparer la valeur de retour, juste le traiter comme une valeur booléenne:

if (isalpha(someinput)) 
    do_whatever(); 

Si vous insistez faire une comparaison, il doit être !=0, mais il est entièrement redondant et inutile.

Vous l'utilisez sur caractères qui ont été lus en entrée, qui ne sont pas (à ce moment) flottants ou quoi que ce soit, juste des groupes de caractères. Dans le cas d'un flottant, certains d'entre eux seront des chiffres, mais beaucoup comprendront également des points décimaux (qui ne sont pas des chiffres) et éventuellement un e, + ou -. Notez également que vous devez normalement convertir l'entrée en unsigned char avant d'appeler l'une des fonctions is*. De nombreux jeux de caractères traiteront certains caractères comme négatifs quand ils sont vus comme signed char, et le passage d'une valeur négative à l'un d'entre eux donne un comportement indéfini.

+0

Que faire si l'entrée numérisée est un nombre qui sera utilisé plus tard pour le calcul? – NLed

+0

@ZaZu: si vous avez déjà converti quelque chose en nombre, il n'y a plus d'utilisation réelle de 'isdigit' ou' isalpha' - c'est maintenant un nombre, pas un chiffre ou un caractère alphabétique. –

+0

Comment convertir un caractère en nombre? – NLed