Probleme programme decompte de mots.
Netrip
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 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 ??
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:
- Probleme programme decompte de mots.
- Trousseau mot de passe iphone - Guide
- Programme demarrage windows - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Message programmé iphone - Guide
2 réponses
Bonjour
L'erreur est là :
Réfléchis un peu à la condition d'arrêt du for, je suis sûr que tu vas trouver.
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.
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,
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,
mais cela ne marche pas non plus ^^.