char des[51]={0};
printf("donner une description de l'article");
scanf("%50c",&magasin[n].description);
for (i=0;i<50;i++)
{ if
(!(strcmp(magasin[n].description[i],' ')&&strcmp(magasin[n].description[i+1],' ')))
{
m=i;
break;
}
}
for (j=0;j<m;j++)
des[j]=magasin[n].description[j];
strcpy(magasin[n].description,des);
le magasin est une structure qui compte plusieurs champ dont description qui est un tableau de 50 caracteres
je voudrais eliminer les caracteres vides non utilises apres mon texte cad lorsqu'il existe deux espaces successives (le programme plante apres la saisi de la chaine )
strcmp() c'est fait pour comparer 2 chaînes avec un '\0' terminal. Ici il n'y a pas de '\0' terminal et ce ne sont pas des chaînes mais des caractères que tu compares. Pour tester l'égalité c'est ==.
Ça marche le format %50c ? Il me semble qu'en général on utilise plutôt %50s non ?
N'employant jamais scanf(), j'ai fait le test. Apparemment la différence entre %50c et %50s est qu'avec %s, un \0 est ajouté, alors qu'avec %c il ne l'est pas:
#include <stdio.h>
int main(void) {
char str[4]={0};
str[2]='#';
printf("? ");
scanf("%2s",str); // ←→ c et s
puts(str);
return(0);
}
- Edité par edgarjacobs 16 décembre 2018 à 13:10:31
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
strcmp() c'est fait pour comparer 2 chaînes avec un '\0' terminal. Ici il n'y a pas de '\0' terminal et ce ne sont pas des chaînes mais des caractères que tu compares. Pour tester l'égalité c'est ==.
D'abord merci pour votre aide, j'ai essaye avec == au lieu de strcmp je ne sais pas comment mais ca marche au debut apres ca crasher. Voici ma structure
typedef struct dimensions
{
float hauteur;
float largeur;
} Dimensions;
enum Type {Meuble,decor,couvert,tableau,instrument};/*attention a ne pas confondre le type Meuble avec la struct meuble*/
typedef struct meuble
{
int code;
int epoque;
char description[50];
int prix;
Dimensions dimension;
int vendu ;/*non_vendu=0,vendu=1*/
enum Type type;
} meuble;
Dalfab a écrit:
Bonjour,
strcmp() c'est fait pour comparer 2 chaînes avec un '\0' terminal. Ici il n'y a pas de '\0' terminal et ce ne sont pas des chaînes mais des caractères que tu compares. Pour tester l'égalité c'est ==.
j'utilise scanf("%50c",&maasin[n].description) pour forcer la lecture sur 50 caracteres car avec le formatage %s scanf s'arrete lorsqu'elle trouve un espace
- Edité par YassineElAroui 16 décembre 2018 à 16:00:36
enregistrement d'une paragraphe
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent