Probleme programme decompte de mots.

Netrip Messages postés 2 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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 ??

2 réponses

  1. Utilisateur anonyme
     
    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
    1. Netrip Messages postés 2 Statut Membre
       
      J'ai essayé de mettre for (i=0;i != '\0',i++)
      mais cela ne marche pas non plus ^^.
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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