Probleme programme decompte de mots.

Fermé
Netrip Messages postés 2 Date d'inscription jeudi 6 février 2014 Statut Membre Dernière intervention 6 février 2014 - 6 févr. 2014 à 23:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 févr. 2014 à 00:06
Bonjour,
Le programme que je dois élaborer doit me retourner le nombre de mots dans une phrase, le truc c'est qu'il ne me decompte qu'un mots dans ma phrase.

#include <stdio.h>
#include <string.h>
#define taille 100
char nombremot(char tab[])
{
int i;
int nb;
nb=1;
char space;
space=' ';
for (i=0;i<'\0';i++)
{


if (tab[i]==space)
{
nb=nb+1;
}
}
return nb;
}
int main (void)
{
char phrase[taille];
int res=0;
char bidon;
printf("Veuillez saisir votre phrase:");
scanf("%s%c",&phrase,&bidon);
res=nombremot(phrase);
printf("Il y a %d mot dans votre phrase",res);
}

J'ai beau chercher mais je ne comprends pas d'ou vient le probleme. Il semble qu'il me retourne toujours la variable nb sans l'incréménter. Le probleme proviendrait donc de la condition ??


A voir également:

2 réponses

Utilisateur anonyme
6 févr. 2014 à 23:31
Bonjour

L'erreur est là :
for (i=0;i<'\0';i++) 

Réfléchis un peu à la condition d'arrêt du for, je suis sûr que tu vas trouver.
1
Netrip Messages postés 2 Date d'inscription jeudi 6 février 2014 Statut Membre Dernière intervention 6 février 2014
6 févr. 2014 à 23:43
J'ai essayé de mettre for (i=0;i != '\0',i++)
mais cela ne marche pas non plus ^^.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
7 févr. 2014 à 00:06
Bonjour,

Déjà, il y a une erreur.
for (i=0;i<'\0';i++)
Ce n'est pas i qu'il faut comparer à '\0', mais la case du tableau... Réfléchis bien là-dessus pour trouver la bonne condition.

Une fois que ça sera corrigé, ça ne fonctionnera toujours pas.
scanf("%s", &phrase), récupère le premier mot et non une phrase. De plus, ce n'est pas &phrase qu'il faut mettre mais phrase : scanf("%s", phrase);
Il faut donc utiliser : fgets(phrase, sizeof phrase, stdin);
En plus, cela rendra ton programme plus robuste car scanf("%s", ...) est très dangereux... Et là ça devrait fonctionner.

Autres remarques d'amélioration de ton code :
printf("Il y a %d mot dans votre phrase",res);
N'oublie pas de mettre "...dans votre phrase\n" pour forcer l'affichage de la phrase.

Tu as oublié le return 0; à la fin de ton main().
char nombremot(char tab[]) int nombre mot(const char tab[]) plutôt. Tu affiches via %d, il faut donc que nombre retourne un int.

if (tab[i]==space)
Je te conseille de mettre : if(tab[i]==' '). C'est plus lisible et moins gourmand en mémoire.

Et enfin une petite réflexion pour la forme : si l'utilisateur termine sa phrase par une espace, ton programme retournera la mauvaise valeur. Si l'utilisateur rentre deux espaces conscutives, cela ne fonctionnera pas bien non plus.

PS : merci d'utiliser la balise "code c" pour poster un code pour plus de lisibilité. Il faut utiliser l'ascenseur situé à droite du bouton "souligné" et sélectionner "C".

Cdlt,
0