IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème Concaténation


Sujet :

C

  1. #1
    Membre régulier Avatar de Jimmy_S
    Inscrit en
    Octobre 2005
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 214
    Points : 85
    Points
    85
    Par défaut Problème Concaténation
    Bonjour je suis entrain de réaliser une petite application en C et j'ai un problème !
    Mon programme a pour but de générer une référence d'un produit en indiquant plusieurs éléments.
    L'utilisateurs doit donc rentrer plusieurs informations , et le code va lui générer une une référence.

    J'ai donc cré une structure qui contient l'ensemble des informations nécessaire à générer la référence d'un produit !
    Et j'aimerai stocké dans une variable ( tab[i].Ref ) , la concaténation de toute les valeurs entrée par l'utilisateur.
    A savoir à la suite : Entity+Year+Project+Kind+Docnumber !

    Pour imager , la variable Tab[i].Ref devrait avoir pour valeur : concaténation successive de Entity Year Project Kind Docnumber.
    C'est à dire Tab[i].Ref <= Entity+Year+Project+Kind+Docnumber;

    Malheuresement je ne connais pas la syntaxe pour faire ceci.
    Cette référence doit être simplement au final une chaine de caractère !


    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    #include <stdio.h>
     
    typedef struct Fiche {
     
    	int Entity;
    	int Year;
    	int Project;
    	char Kind[3];
    	int Docnumber;
    	char Ref[15];
     
    	}Fiche;
     
    main()
     
    {
     
    Fiche tab[5];
    char Test;
    int i;
    int j;
     
     
    	for(i=0;i<1;i++){
     
    		printf("Enter Entity (1,2,3) :\n");
    		scanf("%d",&tab[i].Entity);
    		printf("%d",tab[i].Entity);
    		printf("Enter Year (03 / 04 etc.) :\n");
    		scanf("%d",&tab[i].Year);
    		printf("Enter Project Number :\n");
    		scanf("%d",&tab[i].Project);
    		printf("Enter Kind of Project (3 char):\n");
    		scanf("%s",&tab[i].Kind);
    		printf("%s",tab[i].Kind);
    		printf("Enter Document Number:\n");
    		scanf("%d",&tab[i].Docnumber);
     
    	}
     
     
     
    /* Code Manquant ici ! */
     
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut Re: Problème Concaténation
    Tu peux effectuer cette concaténation dans la même boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    #include <stdio.h>
     
     
     
    typedef struct Fiche {
     
    	int Entity;
    	int Year;
    	int Project;
    	char Kind[3];
    	int Docnumber;
    	char Ref[15];
     
    	}Fiche;
     
    main()
     
    {
     
    Fiche tab[5];
    char Test;
    int i;
    int j;
     
     
    	for(i=0;i<1;i++){
     
    		printf("Enter Entity (1,2,3) :\n");
    		scanf("%d",&tab[i].Entity);
    		printf("%d",tab[i].Entity);
    		printf("Enter Year (03 / 04 etc.) :\n");
    		scanf("%d",&tab[i].Year);
    		printf("Enter Project Number :\n");
    		scanf("%d",&tab[i].Project);
    		printf("Enter Kind of Project (3 char):\n");
    		scanf("%s",&tab[i].Kind);
    		printf("%s",tab[i].Kind);
    		printf("Enter Document Number:\n");
    		scanf("%d",&tab[i].Docnumber);
     
    sprintf(tab[i].Ref, "%d%d%d%s%d", tab[i].Entity, tab[i].Year, tab[i].Project, tab[i].Kind, tab[i].Docnumber)
     
    	}
    }
    Assures-toi que 14 caractères suffisent !

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Problème Concaténation
    Citation Envoyé par Jimmy_S
    Pour imager , la variable Tab[i].Ref devrait avoir pour valeur : concaténation successive de Entity Year Project Kind Docnumber.
    C'est à dire Tab[i].Ref <= Entity+Year+Project+Kind+Docnumber;

    Malheuresement je ne connais pas la syntaxe pour faire ceci.
    Cette référence doit être simplement au final une chaine de caractère !
    sprintf (). Attention a bien gérer la taille de la chaine pour éviter les débordements.

  4. #4
    Membre régulier Avatar de Jimmy_S
    Inscrit en
    Octobre 2005
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 214
    Points : 85
    Points
    85
    Par défaut
    Tu peux m'expliquer en quelques mots la fonction sprintf (je vois ce que ça fait mais je veux en être sûr ^^) ?

    Auto Edit : Et comment donner pour valeur à tab[i].Ref (par exemple) une valeur ! Si je veux que la valeur soit "Test" , comment dois je faire ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Jimmy_S
    Tu peux m'expliquer en quelques mots la fonction sprintf (je vois ce que ça fait mais je veux en être sûr ^^) ?

    Auto Edit : Et comment donner pour valeur à tab[i].Ref (par exemple) une valeur ! Si je veux que la valeur soit "Test" , comment dois je faire ?
    Tu peux rechercher aussi mon coco 8)

    Comme je suis dans un bon jour, je vais t'expliquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(cible, "format", source1, source2, ...)
    alors que printf affiche son résultat dans stdout (sortie standart), sprintf affecte le résultat dans la chaîne cible .

    Si tu me demandes comment fonctionne printf je te répondrais pas !!!

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jimmy_S
    Tu peux m'expliquer en quelques mots la fonction sprintf (je vois ce que ça fait mais je veux en être sûr ^^) ?
    Qu'en pense ton livre de C ? sinon man sprintf
    Et comment donner pour valeur à tab[i].Ref (par exemple) une valeur ! Si je veux que la valeur soit "Test" , comment dois je faire ?
    Pour mettre une chaine dans un tableau de char, on utilise, par exemple, strcpy(). On peut aussi utiliser ce tableau comme destination de sprintf().

    Tiens ? C'est précisément l'exemple qu'a donné tomasha.

  7. #7
    Membre régulier Avatar de Jimmy_S
    Inscrit en
    Octobre 2005
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 214
    Points : 85
    Points
    85
    Par défaut
    Cela marche très bien ! Mais maintenant j'ai passé chaque type de variable dans ma structure en Chaine de Char ! (Cela me permet , si un utilisateur tape 01, de concerver le 0 !)


    PS : Une autre petite question, à quoi sert le * ? Je la vois dans plein de codes présent ici mais j'ai du mal à en saisir le but !

    Et j'obtient ceci :

    Enter Entity (1,2,3) :
    1
    Enter Year (03 / 04 etc.) :
    03
    Enter Project Number :
    01
    Enter Kind of Project (3 char):
    CCC
    Enter Document Number:
    001
    10301CCC00101CCC00110301CCC001CCC00110301CCC00101CCC0011
    0301CCC001CCC0011000110301CCC00101CCC00110301CCC001CCC00
    110301CCC00101CCC00110301CCC001CCC0011000110


    Mon Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <stdio.h>
     
     
     
    typedef struct Fiche {
     
    	char Entity[1];
    	char Year[2];
    	char Project[2];
    	char Kind[3];
    	char Docnumber[3];
    	char Ref[400];
     
    	}Fiche;
     
    main()
     
    {
     
    Fiche tab[5];
    char Test;
    int i;
    int j;
     
     
    	for(i=0;i<1;i++){
     
    		printf("Enter Entity (1,2,3) :\n");
    		scanf("%s",&tab[i].Entity);
    		printf("Enter Year (03 / 04 etc.) :\n");
    		scanf("%s",&tab[i].Year);
    		printf("Enter Project Number :\n");
    		scanf("%s",&tab[i].Project);
    		printf("Enter Kind of Project (3 char):\n");
    		scanf("%s",&tab[i].Kind);
    		printf("Enter Document Number:\n");
    		scanf("%s",&tab[i].Docnumber);
     
     
     
    sprintf(tab[i].Ref, "%s%s%s%s", tab[i].Entity, tab[i].Project,tab[i].Kind, tab[i].Docnumber);
     
    	}
     
     
    printf("%s \n",tab[0].Ref);
     
     
     
     
     
     
    }

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jimmy_S
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct Fiche {
     
    	char Entity[1];
    	char Year[2];
    	char Project[2];
    	char Kind[3];
    	char Docnumber[3];
    	char Ref[400];
     
    	}Fiche;
    La taille des tableaux n'est pas adaptée au travail demandé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <stdio.h>
     
    typedef struct Fiche
    {
     
       char Entity[1 + 1];
       char Year[2 + 1];
       char Project[2 + 1];
       char Kind[3 + 1];
       char Docnumber[3 + 1];
       char Ref[128];
    }
    Fiche;
     
    int main (void)
    {
       Fiche tab[5];
       int i;
     
       for (i = 0; i < 1; i++)
       {
          printf ("Enter Entity (1..3) :\n");
          scanf ("%s", tab[i].Entity);
          printf ("Enter Year (2005 : 05) :\n");
          scanf ("%s", tab[i].Year);
          printf ("Enter Project Number (0-99) :\n");
          scanf ("%s", tab[i].Project);
          printf ("Enter Kind of Project (3 char):\n");
          scanf ("%s", tab[i].Kind);
          printf ("Enter Document Number (0-999):\n");
          scanf ("%s", tab[i].Docnumber);
     
          sprintf (tab[i].Ref, "%s%s%s%s", tab[i].Entity, tab[i].Project, tab[i].Kind, tab[i].Docnumber);
     
       }
     
       printf ("%s \n", tab[0].Ref);
     
       return 0;
    }
    Maintenant, il faut durcir les saisies. Je recommande de laisser tomber scanf() et de lire ceci :

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

Discussions similaires

  1. Problème concaténation avec le "+"
    Par TronsoT dans le forum Général Java
    Réponses: 5
    Dernier message: 03/05/2006, 22h29
  2. [MySQL] Problème concaténation variables
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/03/2006, 17h33
  3. Problème concaténation excel/vba
    Par rotterdamt dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 28/11/2005, 17h47
  4. Problème concaténation
    Par ericain dans le forum Access
    Réponses: 10
    Dernier message: 22/11/2005, 19h40
  5. Problème concaténation requête avec ORACLE
    Par kobe dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/08/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo