Bonjour à tous,
J'ai un problème avec cet exercice sur le langage C....
Ecrivez un programme qui vérifie si des identifiants sont valides, c'est à dire qu'ils peuvent être utilisés comme noms de variables ou de fonctions en langage C. On ne tiendra pas compte des éventuels mots clés, qui seront donc considérés comme des identifiants valides.
Vous pouvez utiliser les fonctions de la bibliothèque standard, dont les prototypes se trouvent dans le fichier ctype.h. En voici quelques unes :
int isalnum(int c); : Teste si le caractère est alphanumérique (lettre majuscule, minuscule ou chiffre).
int isalpha(int c); : Teste si le caractère est une lettre majuscule ou une minuscule.
int iscntrl(int c); : Teste si le caractère est un caractère de contrôle.
int isdigit(int c); : Teste si le caractère est un chiffre.
int islower(int c); : Teste si le caractère est une lettre minuscule.
int isupper(int c); : Teste si le caractère est une lettre majuscule.
Chacune de ces fonctions retourne 0 (faux) si le caractère n'est pas du type testé et une valeur non nulle (vrai) sinon.
On rappelle qu'un identifiant en langage C doit commencer par une lettre non accentuée ou un caractère '_', et que chacune des lettres suivantes est soit une lettre non accentuée, soit un '_', soit un chiffre.
Mon programme:
Les identifiants choisis dans l'exemple sont pour N=5 :Code:#include <stdio.h> #include <ctype.h> int main () { int N,i,j,novalid; char c; scanf("%d",&N); for (i=1; i <= N; i++) { scanf("%c",&c); novalid=0; j=1; while (c != '\n' ) { if(j==1){ if (isalpha((int)c) == 0 && c != '_') novalid++ ; } else { if (isalnum((int)c) == 0 && c != '_') novalid++; } j++ ; scanf("%c",&c); } if (novalid == 0) printf("YES\n"); else printf("NO\n"); } return 0; }
Bonjour32
réussi
_toto_
passe-partout
2_fois
J'obtiens:
La réponse donnée par votre programme est incorrecte.
Il a affiché :
YES
YES
NO
YES
NO
au lieu de :
YES
NO
YES
NO
NO
D'avance je vous remercie...
Bien cordialement et joyeuses fêtes
Mägodeoz
-----