Un pb avec un strcmp

Fermé
donomar - 18 avril 2008 à 13:00
donomar Messages postés 8 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 26 avril 2008 - 18 avril 2008 à 15:30
Bonjour,
voici un code source
int calc_log_total_vendu(logement tab[MAX],int nb)
{
int a=0; // nombre total de bien vendu
int i=0; //variable de boucle for
char vend[]={'v','e','n','d','u','\0'};// initialisation de la chaine à comparer avec le statut de chaque logement
for(i=0;i<nb;i++)
{
if(strcmp(tab[i].statut,vend)==0)
{
a=a+1;
}
}
return a;
}
quand je le test
il ne tient pas compte du strcmp
cmt faire..........merci pour votre aide

2 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
18 avril 2008 à 14:14
Pour commencer pour a et i j'utiliserais plutôt des unsigned vu que ce sont des valeurs positives. Et pour initialiser vend :
char *vend = "vendu";

Ensuite si tu regardes la documentation de strcmp tu t'apercevras que cette fonction retourne 0 si les deux chaînes sont strictement égales (il suffit de taper dans google man strcmp) :
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcmp.3.html

Si le test ne retourne pas 0 c'est que les deux chaînes diffèrent. Pour le vérifier, affiche les dans la console :
printf("tab[i].statut = [%s]\n,tab[i].statut);
printf("vend = [%s]\n,vend);
if(strcmp(tab[i].statut,vend)==0) {
....
}

Plutôt que de stocker dans tab une chaîne de caractère indiquant l'état du produit il serait plus économique en mémoire et plus facile en terme de code de manipuler une valeur numérique. Par exemple :
#define NON_VENDU 0
#define VENDU 1
...
if(tab[i] == VENDU){ //tab stocke désormais une valeur numérique
...
}

Bonne chance
0
donomar Messages postés 8 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 26 avril 2008
18 avril 2008 à 15:30
thx g essai et g revien
0