Partage
  • Partager sur Facebook
  • Partager sur Twitter

enregistrement d'une paragraphe

    15 décembre 2018 à 15:24:37

    voici mon code 

    int i,j,m;
    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 )

    je vous remercie de votre aide 

    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2018 à 18:23:39

      Vérifie ton parametre a la fonction scanf(), on ne sait pas comment tu déclares tes variables mais l'esperluette me semble en trop.
      • Partager sur Facebook
      • Partager sur Twitter
        15 décembre 2018 à 19:26:43

        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 ==.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          16 décembre 2018 à 9:45:24

          Ça marche le format %50c ? Il me semble qu'en général on utilise plutôt %50s non ?

          -
          Edité par robun 16 décembre 2018 à 9:46:00

          • Partager sur Facebook
          • Partager sur Twitter
            16 décembre 2018 à 13:09:14

            robun a écrit:

            Ç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

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              16 décembre 2018 à 15:53:39

              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 ==.

              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

              • Partager sur Facebook
              • Partager sur Twitter

              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.
              • Editeur
              • Markdown