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 :

printf et LARGE_INTEGER


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut printf et LARGE_INTEGER
    Bonjour a tous
    j'ai besoin d'afficher un LARGE_INTEGER avec printf, quelqu'un connait la solution ou plutot le caractère de formatage adéquat ?
    précision: gcc utilisé
    A bientot

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    ce que tu appeles un LARGE_INTEGER, c'est un long ? Essaie %l

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par gl
    ce que tu appeles un LARGE_INTEGER, c'est un long ? Essaie %l
    Non , on c'est un longlong ou un __int64 si tu preferes j'ai essayé %I64d ca marche pas ?!!

  4. #4
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut

    Alors essaye "%lu" (normalement long non signé) ou "%li" (normalement long signé) !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par Elijha
    Salut

    Alors essaye "%lu" (normalement long non signé) ou "%li" (normalement long signé) !
    Imposs.. ca marche pas j'ai vraiment presque tout essayé, je me demande si le compilateur l'accepte meme!

    Voici LARGE_INTEGER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef union union {  struct {    DWORD LowPart;    LONG HighPart;  };  LONGLONG QuadPart;
    } LARGE_INTEGER, *PLARGE_INTEGER;

  6. #6
    Membre émérite
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Par défaut
    Bonjour,

    Je vais essayer de te venir en aide.
    J'ai fait un petit test et le programme suivant marche (il faut gcc bien sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int     main()
    {
      long long     j;
     
      j = 9223372036854775805;
      printf("%i\n", sizeof(j));
      printf("%ji\n", j);
    }
    J'espere que ca marchera pour ton cas.

  7. #7
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    nyal, tu utilise j, qui semble etre le max de la machine (d'apres le man):
    Citation Envoyé par man 3 printf
    ll (ell-ell). A following integer conversion corresponds to a long
    long int or unsigned long long int argument, or a following n
    conversion corresponds to a pointer to a long long int argument.

    L A following a, A, e, E, f, F, g, or G conversion corresponds to
    a long double argument. (C99 allows %LF, but SUSv2 does not.)

    q (`quad'. BSD 4.4 and Linux libc5 only. Don't use.) This is a
    synonym for ll.

    j A following integer conversion corresponds to an intmax_t or
    uintmax_t argument.
    A mon avis, ll (2 petits L) seraient mieux.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par nyal
    Bonjour,

    Je vais essayer de te venir en aide.
    J'ai fait un petit test et le programme suivant marche (il faut gcc bien sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int     main()
    {
      long long     j;
     
      j = 9223372036854775805;
      printf("%i\n", sizeof(j));
      printf("%ji\n", j);
    }
    J'espere que ca marchera pour ton cas.
    Non ca n'y fait rien d'autant que c'est bizarre puisque meme si le forum n'est pas c++ avec l'utilisation de cout ca marche .
    Tu utilises quel version de gcc , moi c'est la 2,95 et est tu sur du format %ji??

  9. #9
    Membre émérite
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Par défaut
    Citation Envoyé par D[r
    eadLock]nyal, tu utilise j, qui semble etre le max de la machine (d'apres le man):
    Citation Envoyé par man 3 printf
    ll (ell-ell). A following integer conversion corresponds to a long
    long int or unsigned long long int argument, or a following n
    conversion corresponds to a pointer to a long long int argument.

    L A following a, A, e, E, f, F, g, or G conversion corresponds to
    a long double argument. (C99 allows %LF, but SUSv2 does not.)

    q (`quad'. BSD 4.4 and Linux libc5 only. Don't use.) This is a
    synonym for ll.

    j A following integer conversion corresponds to an intmax_t or
    uintmax_t argument.
    A mon avis, ll (2 petits L) seraient mieux.
    Oui en effet. J'avsi testé le ll mais j'etais sous BSD. Il faut q suivi de i ou u (il oublie de le dire dans ton man)
    Ca marche aussi bien.

    Citation Envoyé par KORTA
    Tu utilises quel version de gcc
    Je suis sur la meme version que toi. Essaye plutot le ll c'est plus sur.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Citation Envoyé par nyal
    Suite a ce que tu as dit
    Il ne veut rien entendre! Le plus étonnant c'est que pour cout ca marche!!
    D'autant que ton code a toi n'est pas compilable meme avec ll en remplacement de j
    E:\home\test>g++ -g test.c
    test.c: In function `int main(int, char **)':
    test.c:57: integer constant out of range
    test.c:57: warning: decimal integer constant is so large that it is unsigned

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <iostream.h>
    #include <stdio.h>  
     
    int main(int argc,char **argv)
    {
      long long  i=111102121454545541ll;
      printf("PRINTF:%lli\n",i);
      cout<<"COUT:"<<i<<endl;
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    E:\home\test>g++ test.c
     
    E:\home\test>a.exe
    PRINTF:1930898053
    COUT:111102121454545541
     
    E:\home\test>
    Petite chose a préciser je suis sur windows!
    Bizarre, tout de meme?
    D'autant plus que compilé et executé sous linux le résultat fonctionne!
    Personne a une version de stdio.h a me filer ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] [debutant] equivalent printf() en C
    Par bmayer dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 25/12/2003, 19h43
  2. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21
  3. printf avec %g
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 15/09/2003, 09h08
  4. les accents et printf
    Par remi77 dans le forum C
    Réponses: 5
    Dernier message: 07/07/2003, 20h53
  5. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24

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