Isalpha
Fermé
siwar
-
Modifié par crapoulou le 6/11/2016 à 13:40
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 7 nov. 2016 à 13:06
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 7 nov. 2016 à 13:06
6 réponses
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
6 nov. 2016 à 14:01
6 nov. 2016 à 14:01
peut-être :
while(test==1); // mieux avec == au lieu de =
NHenry
Messages postés
15173
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 décembre 2024
350
6 nov. 2016 à 14:22
6 nov. 2016 à 14:22
Essayes de voir ton code en pas à pas.
As-tu le code de la fonction : isalpha ?
As-tu le code de la fonction : isalpha ?
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
7 nov. 2016 à 12:19
7 nov. 2016 à 12:19
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
6 nov. 2016 à 14:45
6 nov. 2016 à 14:45
Comment détermines-tu que ton programme accepte toute les chaines saisies?
Pourquoi fais-tu une boucle "do"?
Ce serait utile, surtout pour toi, que tu expliques ce que tu veux que ton programme fasse. Pourquoi pas en ajoutant un petit texte en commentaire de ton programme?
Quelle est l'utilisation exacte de ta variable "test"?
Pourquoi fais-tu une boucle "do"?
Ce serait utile, surtout pour toi, que tu expliques ce que tu veux que ton programme fasse. Pourquoi pas en ajoutant un petit texte en commentaire de ton programme?
Quelle est l'utilisation exacte de ta variable "test"?
NHenry
Messages postés
15173
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 décembre 2024
350
6 nov. 2016 à 15:11
6 nov. 2016 à 15:11
a-z 0-9 sot des caractère alphanumérique.
As-tu vérifié si isalpha test si c'est alphabétique ou alphanumérique ?
As-tu vérifié si isalpha test si c'est alphabétique ou alphanumérique ?
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
6 nov. 2016 à 15:15
6 nov. 2016 à 15:15
Pourquoi fais-tu une boucle "do while"?
Comment sais-tu que ton programme a accepté la chaîne ?
Comment sais-tu que ton programme a accepté la chaîne ?
@yg_be
j'ai fais la boucle do while pour qu'il me redemande de lui donner une autre phrase tant que la condition n'est pas vérifiée et puisqu'il ne me redemande pas de lui donner une nouvelle phrase meme qu'elle contienne des chiffres et , *-+ ex... j'ai su qu'il a accepté toute les chaines saisies
@NHenry
isalpha teste si un caractere est alphabetique
j'ai fais la boucle do while pour qu'il me redemande de lui donner une autre phrase tant que la condition n'est pas vérifiée et puisqu'il ne me redemande pas de lui donner une nouvelle phrase meme qu'elle contienne des chiffres et , *-+ ex... j'ai su qu'il a accepté toute les chaines saisies
@NHenry
isalpha teste si un caractere est alphabetique
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
6 nov. 2016 à 16:01
6 nov. 2016 à 16:01
Je pense que le programme continue tant que la chaîne est refusée...
Si le programme ne demande plus rien, c'est qu'il a refusé la première chaîne.
De plus, comme tu ne remets pas test à zéro quand tu refais gets() une seconde fois, le programme ne va jamais s’arrêter si la première chaîne est refusée.
Si le programme ne demande plus rien, c'est qu'il a refusé la première chaîne.
De plus, comme tu ne remets pas test à zéro quand tu refais gets() une seconde fois, le programme ne va jamais s’arrêter si la première chaîne est refusée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
6 nov. 2016 à 17:03
6 nov. 2016 à 17:03
par exemple:
et
if (!(isalpha(k[i]))) { test=1; printf("|%c| is NOT in alphabet\n", k[i] ); break; } else printf("|%c| is in alphabet\n", k[i] );
et
printf("FINI\n"); return 0;
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 7/11/2016 à 12:58
Modifié par [Dal] le 7/11/2016 à 12:58
Salut siwar,
Je n'ai pas testé ton code, mais quelques observations en plus de la correction du while en
fgets() devrait être utilisé
que l'un ou l'autre soit utilisé, si la chaîne saisie est de taille inférieure à l'espace alloué (moins 1),
Il faudrait le prendre en compte dans le code, en retirant le
Vois par exemple : https://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input pour du code utilisant
Note que
Dal
Je n'ai pas testé ton code, mais quelques observations en plus de la correction du while en
while(test==1);qui t'a déjà été indiquée par yg_be.
isalpha()est dans ctype.h, il te faut donc un include sur cet entête standard.
gets()à à bannir, car la saisie n'est pas sécurisée
fgets() devrait être utilisé
que l'un ou l'autre soit utilisé, si la chaîne saisie est de taille inférieure à l'espace alloué (moins 1),
'\n'va être copié dans la chaîne capturée (retour à la ligne). Or, il ne s'agit pas d'un caractère alphabétique.
Il faudrait le prendre en compte dans le code, en retirant le
'\n'ajouté par
fgets(), et donc en terminant la chaîne à cet endroit si
fgets()a inséré un retour à la ligne (à tester avec strchr()).
Vois par exemple : https://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input pour du code utilisant
strchr()pour retirer le retour à la ligne (et d'autres solutions alternatives moins habituelles).
Note que
scanf(), en revanche, ne va pas capturer le retour à la ligne,.. mais elle n'est pas sans d'autres types de difficultés.
Dal
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 7/11/2016 à 13:10
Modifié par [Dal] le 7/11/2016 à 13:10
correction, je n'avais pas vu que tu arrêtes ta boucle for à
cependant ton code ne marchera pas si on saisit 99 caractères et que le dernier est non alphabétique, car il ne sera pas testé,... alors, je pense que la suppression du
Je pense aussi que le texte "donner la phrase" est erroné, car une phrase peut contenir des espaces et de la ponctuation, qui sont des caractères non alphabétiques. En fait "tapez des lettres de l'alphabet" serait mieux.
De plus, les accents ne seront pas pris en compte si ta locale n'est pas réglée.
Dal
i<strlen(k)-1et non à
i<strlen(k).. du coup, la plupart du temps, tu vas effectivement t'arrêter avant le retour à la ligne.
cependant ton code ne marchera pas si on saisit 99 caractères et que le dernier est non alphabétique, car il ne sera pas testé,... alors, je pense que la suppression du
'\n's'il existe est une meilleure solution (proposée ci-dessus).
Je pense aussi que le texte "donner la phrase" est erroné, car une phrase peut contenir des espaces et de la ponctuation, qui sont des caractères non alphabétiques. En fait "tapez des lettres de l'alphabet" serait mieux.
De plus, les accents ne seront pas pris en compte si ta locale n'est pas réglée.
Dal