Programme C phrase palindrome
Fermé
Daniel
-
Modifié par Daniel le 16/02/2012 à 18:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 févr. 2012 à 01:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 févr. 2012 à 01:12
A voir également:
- Programme C phrase palindrome
- Programme demarrage windows 10 - Guide
- Vérifier si une phrase est correcte - Accueil - Google
- Mettre en veille un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 18/02/2012 à 01:11
Modifié par fiddy le 18/02/2012 à 01:11
Bonjour,
Il y a deux raisons pour que ça ne marche pas.
La première est que tu utilises scanf("%s", ch), la chaîne s'arrêtera donc au premier espace. Ainsi, ch vaudra "esope" qui n'est évidemment pas un palindrome.
Il faut donc corriger en utilisant fgets, ou sinon scanf("%[^\n]", ch)
ch = malloc (10 * sizeof (char)) ;
"esope reste ..." est une chaîne qui fait plus que 9 caractères, donc cela va causer des problèmes.
En plus, tu as oublié le free. Bref, autant mettre une allocation statique comme : char ch[256]; et hop tu ne te poses pas de question. A condition d'utiliser scanf("%255[^\n]", ch);
Ensuite, quelques remarques sur le code :
if (ph[deb] != ph[fin])
return 0;
else
Autant ne pas mettre le else. Ou alors utilise des accolades car sinon seule l'instruction suivante fait partie du else. Algorithmiquement, ça fera la même chose, mais ce n'est pas propre.
je te laisse le soin de corriger tes erreurs et si ça ne marche pas, reposte ton code en utilisant la balise "code" (à droite du bouton souligné).
Et pour info, la célèbre phrase est : "esope reste ici et se repose" ;-)))
Cdlt,
Google is your friend
Il y a deux raisons pour que ça ne marche pas.
La première est que tu utilises scanf("%s", ch), la chaîne s'arrêtera donc au premier espace. Ainsi, ch vaudra "esope" qui n'est évidemment pas un palindrome.
Il faut donc corriger en utilisant fgets, ou sinon scanf("%[^\n]", ch)
ch = malloc (10 * sizeof (char)) ;
"esope reste ..." est une chaîne qui fait plus que 9 caractères, donc cela va causer des problèmes.
En plus, tu as oublié le free. Bref, autant mettre une allocation statique comme : char ch[256]; et hop tu ne te poses pas de question. A condition d'utiliser scanf("%255[^\n]", ch);
Ensuite, quelques remarques sur le code :
if (ph[deb] != ph[fin])
return 0;
else
Autant ne pas mettre le else. Ou alors utilise des accolades car sinon seule l'instruction suivante fait partie du else. Algorithmiquement, ça fera la même chose, mais ce n'est pas propre.
je te laisse le soin de corriger tes erreurs et si ça ne marche pas, reposte ton code en utilisant la balise "code" (à droite du bouton souligné).
Et pour info, la célèbre phrase est : "esope reste ici et se repose" ;-)))
Cdlt,
Google is your friend
malaik5
Messages postés
258
Date d'inscription
vendredi 20 novembre 2009
Statut
Membre
Dernière intervention
28 novembre 2013
33
17 févr. 2012 à 15:42
17 févr. 2012 à 15:42
Bonjour,
Je n'ai pas bien regarder de ton par manque de temps, mais à premiere vue, je pense que c'est les espaces qui te foutent la merde, je m'explique :
à un moment donné tu va comparer le 'r' avec espace et bien évidement ce n'est pas le meme caractere, et du coup tu as en sortie '0' et du coup ta fonction main te dit que ta phrase et non palindrome ce qui est totalement logique.
e = e
s = s
o = o
p = p
e = e
= r --> faux.
Essayes autre chose et tiens moi au courant.
Je n'ai pas bien regarder de ton par manque de temps, mais à premiere vue, je pense que c'est les espaces qui te foutent la merde, je m'explique :
à un moment donné tu va comparer le 'r' avec espace et bien évidement ce n'est pas le meme caractere, et du coup tu as en sortie '0' et du coup ta fonction main te dit que ta phrase et non palindrome ce qui est totalement logique.
e = e
s = s
o = o
p = p
e = e
= r --> faux.
Essayes autre chose et tiens moi au courant.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 18/02/2012 à 01:13
Modifié par fiddy le 18/02/2012 à 01:13
Ce ne sont pas les espaces puisqu'il a bien mis :
En revanche, un while aurait été mieux pour éviter les problèmes en cas de multiples espaces.
if (ph(deb) == ' ') deb++; if (ph(fin) == ' ') fin--;
En revanche, un while aurait été mieux pour éviter les problèmes en cas de multiples espaces.