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 :

Convertir une chaine dans un entier signé avec un zero préfixé (sscanf)


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Convertir une chaine dans un entier signé avec un zero préfixé (sscanf)
    Bonjour,
    Voici mon problème, je souhaite récupérer 3 valeurs d,m,s à partir d'une chaine de caractère strToken qui représente une déclinaison (en degrés) d'une étoile.
    Cette chaine est par exemple "-09 45 02" (on peut aussi avoir des valeurs préfixées avec +)...
    Je souhaite que
    d = -9
    m = 45
    s = 2
    j'utilise sscanf(strToken,"%2i %2i %2i",&d,&m,&s);,
    autant pour s ça passe autant pour d, il me met 0
    En mettant %3i cela ne marche pas aussi (évidemment..)
    Quelqu'un a t-il une idée ??
    Merci+++

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si tes chiffres peuvent etre préfixés de 0, peut-être un format %0i ferait l'affaire ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Si tes chiffres peuvent etre préfixés de 0, peut-être un format %0i ferait l'affaire ?
    Non, j'avais déjà fait le test mais cela ne marche pas. Il semblerait que la seule solution est de récupérer la première partie dans une string et de tester caractere par caractere.
    Mais il y a certainement un moyen plus rapide....

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Et avec juste %i ?
    Tu n'as pas besoin de spécifier la taille puisque tes valeurs sont séparées d'espaces.
    En lisant 2 nombres, il va lire -0 et sortir 0.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par lebuzz Voir le message
    Mais il y a certainement un moyen plus rapide....
    Bon, j'ai trouvé, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char dd[4] = {'\0'};
    sscanf(strToken,"%s %2i %2i",dd,&m,&s);
    d = atoi(dd);
    printf("  h=%i,m=%i,s=%i   ",d,m,s);
    la fonction atoi ne me plait guère mais bon...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    %i permet la lecture en octal et hexadécimal. Le préfix 0 est pour l'écriture octale.
    Utiliser %d et non %i pour le scan fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
        const char* str = "-079 054 +56";
        int a, b, c;
        sscanf(str, "%d %d %d", &a, &b, &c);
        printf("a=%d, b=%d, c=%d", a, b, c);
     
        return 0;
    }
    Retourne bien a=-79, b=54, c=56
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/02/2018, 03h25
  2. Réponses: 0
    Dernier message: 13/02/2011, 17h27
  3. Convertir une chaine hexadecimale en entier
    Par hpalpha dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/02/2011, 17h21
  4. [XSLT]Convertir une chaîne en float, int etc ... avec XSL
    Par wozzz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/05/2006, 10h12
  5. Réponses: 6
    Dernier message: 09/04/2006, 16h26

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