Erreur code? (C)
Résolu/Fermé
A voir également:
- Erreur code? (C)
- Erreur 0x80070643 - Accueil - Windows
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
4 réponses
Bonjour,
En C, le fait d'utiliser ou non les accolades pour identifier les blocs est optionnel si il n'y a qu'une seule instruction dans le bloc. Cependant, ils permettent aussi de définir les points d'applications des else. Ainsi dans ta fonction PositionAlphabet, ton
De la même façon, ton dernier else ne s'applique sans doutes pas sur le if auquel tu t'attendais.
Essayes de définir proprement tes blocs avec des accolades et normalement ça devrait marcher.
En C, le fait d'utiliser ou non les accolades pour identifier les blocs est optionnel si il n'y a qu'une seule instruction dans le bloc. Cependant, ils permettent aussi de définir les points d'applications des else. Ainsi dans ta fonction PositionAlphabet, ton
else if (isupper(lettre) != 0)ne s'applique pas sur le
if (islower(lettre) != 0)mais sur le
if (lettre == 'a' + position)
De la même façon, ton dernier else ne s'applique sans doutes pas sur le if auquel tu t'attendais.
Essayes de définir proprement tes blocs avec des accolades et normalement ça devrait marcher.
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
1 juin 2012 à 02:42
1 juin 2012 à 02:42
Et pourquoi ne pas afficher en debug ce qui rentre dans la fonction pour être sûr de ce qui est testé?
periplasme
Messages postés
391
Date d'inscription
vendredi 22 avril 2011
Statut
Membre
Dernière intervention
5 février 2013
53
Modifié par periplasme le 1/06/2012 à 09:48
Modifié par periplasme le 1/06/2012 à 09:48
au lieu de faire des "return position" dans tes boucles,
je te conseille de stocké le résultat dans une variable, et de faire un seul return à la fin .
avec ça, tu est sur qu'il retournera une valeur quoi qu'il arrive.
je propose ça un peu à froid et après être rester quelques long mois sans pratiquer le C, mais ça devrait faire ce que tu souhaite.
je te conseille de stocké le résultat dans une variable, et de faire un seul return à la fin .
int PositionAlphabet(char lettre) { int position; int resultat = -1; // initialisé avec ton code d'erreur if (islower(lettre) != 0) { for (position = 0; position < 26; position++){ if (lettre == 'a' + position) { resultat = position; break; // on stop la boucle } } } else if (isupper(lettre) != 0) { for (position = 0; position < 26; position++) { if (lettre == 'A' + position) { resultat = position; break; // on stop la boucle } } } return resultat; }
avec ça, tu est sur qu'il retournera une valeur quoi qu'il arrive.
je propose ça un peu à froid et après être rester quelques long mois sans pratiquer le C, mais ça devrait faire ce que tu souhaite.
Après m'etre acharné pendant une heure avec des printf ( je ne sais pas vraiment me servir du debugger) j'ai découvert (en fait je me demande comment, j'aurais pu continuer à chercher longtemps avec des printf et des machins) que c'était une erreur de syntaxe par rapport aux if. C'est exactement ça Aoec.
Merci aussi à arth et à periplasme.
periplasme > Merci! Je le faisais par simplicité, mais c'est vrai que mettre des return partout c'est pas très classe. (d'ailleurs maintenant que j'y pense, meme si le break est mieux, on devrait pas plutot faire un while où on met le if en condition de sortie? Du genre while(position < 26 && lettre != 'A' + position ) ? On se contenterait d'incrémenter dans la boucle)
Merci aussi à arth et à periplasme.
periplasme > Merci! Je le faisais par simplicité, mais c'est vrai que mettre des return partout c'est pas très classe. (d'ailleurs maintenant que j'y pense, meme si le break est mieux, on devrait pas plutot faire un while où on met le if en condition de sortie? Du genre while(position < 26 && lettre != 'A' + position ) ? On se contenterait d'incrémenter dans la boucle)
1 juin 2012 à 09:49