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 :

concaténer deux variables de type entière


Sujet :

C

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut concaténer deux variables de type entière
    Bonjour tout le monde,

    J'aimerais concaténer les valeurs de deux variables de type int.

    la première variable contient 504 et la seconde variable contient 3116894

    j'aimerais que variable3 donne 5043116894

    Est-ce possible avec des variables entières ?

    Merci d'avance.

    beegees

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Bonjour tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       int x = 456;
       int y = 789;
     
       x = (x * pow(10, (int)(log10(y) + 1))) + y;
       printf("%d\n",x);
       return 0;
    }
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Une petite manip' du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       const int i1 = 504;
       const int i2 = 3116894;
       int i3 = 0;
       char str[20] = {0};
     
       sprintf(str, "%d%d", i1, i2);
       i3 = atoi(str);
    devrait faire l'affaire (non testé)

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Bonjour tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       int x = 456;
       int y = 789;
     
       x = (x * pow(10, (int)(log10(y) + 1))) + y;
       printf("%d\n",x);
       return 0;
    }
    Cordialement.
    Bonjour Nicolas,

    Merci pour ta réponse.

    J'ai testé ton code, avec tes chiffres, ça fonctionne, pas avec les miens

    As-tu testé avec mes chiffres ?

    Merci encore pour ton aide.

    beegees

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par muad'dib Voir le message
    Une petite manip' du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       const int i1 = 504;
       const int i2 = 3116894;
       int i3 = 0;
       char str[20] = {0};
     
       sprintf(str, "%d%d", i1, i2);
       i3 = atoi(str);
    devrait faire l'affaire (non testé)
    Salut,

    Merci pour ta réponse.

    C'est assez bizzare car j'ai essayé ton code, le résultat n'est pas celui attendu mais ce résultat correspond au résultat que j'ai obtenu avec le code de Nicolas.

    beegees

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Oui c'est normal, je pense que le type int fait 32 bits chez toi et ne dépasse pas la valeur 2 milliards et des poussières alors que ton nombre fait 5 milliards et des poussières : tu peux passer en long long (min 64 bits).
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Oui c'est normal, je pense que le type int fait 32 bits chez toi et ne dépasse pas la valeur 2 milliards et des poussières alors que ton nombre fait 5 milliards et des poussières : tu peux passer en long long (min 64 bits).
    Re,

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    long x = 504;
       long y = 3116894;
     
       x = (x * pow(10, (long)(log10(y) + 1)) ) + y;
       printf("%ld\n",x);
    Et voici le résultat de x :

    x 748149598
    Je pense pourtant avoir bien tout changé ?

    Qu'en penses-tu ?

  8. #8
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       long long x = 504LL;
       long long y = 3116894LL;
     
       x = (x * pow(10, (int)(log10(y) + 1)) ) + y;
       printf("%lld\n",x);
       return 0;
    }
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       long long x = 504LL;
       long long y = 3116894LL;
     
       x = (x * pow(10, (int)(log10(y) + 1)) ) + y;
       printf("%lld\n",x);
       return 0;
    }
    Merci pour ton code,

    J'obtiens des messages d'erreur :

    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(120) : error C2632: 'long' followed by 'long' is illegal
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(120) : error C2059: syntax error : 'bad suffix on number'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(120) : error C2146: syntax error : missing ';' before identifier 'L'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(120) : error C2065: 'L' : undeclared identifier
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(121) : error C2059: syntax error : 'bad suffix on number'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(121) : error C2146: syntax error : missing ';' before identifier 'L'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ComptesBancaires\ComptesBancaires\ComptesBancaires.cpp(123) : warning C4244: '=' : conversion from 'double' to 'long', possible loss of data

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    Ta version de Visual est trop vieille.
    Utilise le type __int64 à la place de long long.

    (je recommande de passer par un typedef)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ta version de Visual est trop vieille.
    Utilise le type __int64 à la place de long long.

    (je recommande de passer par un typedef)
    Nikel

    ça fonctionne avec le type __int64

    J'ai donc utilisé ce code (ça pourrait servir pour les autres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	__int64  x = 504;
       __int64  y = 3116894;
     
       x = (x * pow(10, (__int64 )(log10(y) + 1)) ) + y;
       printf("%ld\n",x);
    Problème résolu, un super grand merci à vous trois.

    beegees

  12. #12
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ta version de Visual est trop vieille.
    Utilise le type __int64 à la place de long long.

    (je recommande de passer par un typedef)
    ça serait mieux qu'il télécharge la dernière version... enfin c'est mon avis.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  13. #13
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par beegees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	__int64  x = 504;
       __int64  y = 3116894;
     
       x = (x * pow(10, (__int64 )(log10(y) + 1)) ) + y;
       printf("%ld\n",x);
    Non le code de format pour __int64 est I64d :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __int64  x = 504;
       __int64  y = 3116894;
     
       x = (x * pow(10, (__int64 )(log10(y) + 1)) ) + y;
       printf("%I64d\n",x);
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  14. #14
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    ça serait mieux qu'il télécharge la dernière version... enfin c'est mon avis.
    Cordialement.
    J'ai visual Studio C++6, 2003 et 2005 toutes les versions complètes et originales.

    J'utilise la première version car à l'école, on utilise celle là pour apprendre le C, si j'ai la chance de réussir mes études, j'utiliserai la version 2005.

    Merci encore pour ton aide

    beegees

  15. #15
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Sincèrement le compilo de microsoft est déjà assez en retard comme ça : la version 2008 bêta 2 est sorti, j'ai eu l'occasion de la testé, elle est pas mal alors ne perd pas de temps à télécharger la 2005.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  16. #16
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Non le code de format pour __int64 est I64d :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __int64  x = 504;
       __int64  y = 3116894;
     
       x = (x * pow(10, (__int64 )(log10(y) + 1)) ) + y;
       printf("%I64d\n",x);
    oops

    Je t'avoue que je travaille en mode déboguage et je n'avais pas affiché à l'écran le résultat.

    Bien vue en tout cas et pour tout

    beegees

  17. #17
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Sincèrement le compilo de microsoft est déjà assez en retard comme ça : la version 2008 bêta 2 est sorti, j'ai eu l'occasion de la testé, elle est pas mal alors ne perd pas de temps à télécharger la 2005.
    Cordialement.
    J'ai la version originale de VS2005 (au boulot) mais je l'utiliserai quand j'aurais terminé mes études (cours du soir).

    Pour l'instant, je crée quelques programmes en VB.net avec VS2003 qui est vraiment pas mal.

    Il y'a des grosses différences entre les deux (2003 et 2005) ?

    En parlant de compilateur, sais-tu si c'est possible de sélectionner du code et de le mettre en commentaire (comme vba le permet) ?

    Je peux ouvrir un autre post si il le faut.

    Merci
    Beegees

  18. #18
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par beegees Voir le message
    Il y'a des grosses différences entre les deux (2003 et 2005) ?

    En parlant de compilateur, sais-tu si c'est possible de sélectionner du code et de le mettre en commentaire (comme vba le permet) ?
    Pour les différences, je pourrais pas te dire, en revanche pour la mise en commentaire de code sélectionné pas de problèmes.

    Enfin, d'après ce que j'ai pu comprendre, le type long long (enfin l'alias de __int64) est sorti avec la version 2003, en reprenant et complétant un ancien code d'Emmanuel Delahaye on peut faire quelque chose de portable comme ceci :
    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
    #include <stdio.h>
    #include <limits.h>
     
    #if defined(WIN32) && defined(_MSC_VER) &&  (_MSC_VER < 1310)
    typedef unsigned __int64 ullong;
    typedef __int64 llong;
    #define LL "I64"
    #else
    typedef unsigned long long ullong;
    typedef long long llong;
    #define LL "ll"
    #endif
     
    int main (void)
    {
       ullong a = 99999999999;
       llong b = 9999999999;
       llong c = -9999999999;
     
       printf ("a = %" LL "u\n", a);
       printf ("b = %" LL "d\n", b);
       printf ("c = %" LL "d\n", c);
     
       return 0;
    }
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  19. #19
    Membre actif
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 274
    Points
    274
    Par défaut
    Pour avoir un code propre, je pense que tu devrais tester la taille de tes deux nombres et refuser l'operation si tu sais que tu sortira de la borne du type que tu utilises.
    C'est tout de meme plus propre si tu es amener a utiliser une fonction comme cela sur de gros nombres.

  20. #20
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Cela va de soit, ici c'est un forum, je ne vais pas lui faire un code complet j'essaye juste de proposer une solution à un problème.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.0] Concaténer deux variables
    Par cyrilherve dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2009, 14h20
  2. Concaténer deux variables
    Par Vascogil dans le forum SAS Base
    Réponses: 4
    Dernier message: 26/05/2008, 10h19
  3. [MySQL] Soustraction de deux variables de type DATETIME
    Par Sekmeth dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/01/2008, 10h11
  4. Concaténer deux variables dans une boucle
    Par jeremie74 dans le forum Flash
    Réponses: 2
    Dernier message: 22/05/2007, 19h51
  5. Concaténer deux variables ?
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 19/12/2003, 13h53

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