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 :

strtol & atol


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Par défaut strtol & atol
    Bonjour,

    Dans le cas d'un saisie comme sur l'exemple d'Emmanuel

    strtol (temp, NULL, 10) peut être remplacer par atol(temp) ?

    merci,


    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
       int ret;
       char temp[20];
     
       do
       {
          char saisie[20];
     
          printf("Entrez un nombre : ");
          fflush (stdout);
     
          fgets (saisie, sizeof saisie, stdin);
     
          /* Filtrage des caracteres (entier decimal)
           * Nota : la saisie s'arrete a la premiere erreur.
           * Ce qui est saisi avant est considere comme valide.
           *
           * "123a" -> "123" : ret = 1
           *
           * "a123" -> ""    : ret = 0
           */
          ret = sscanf (saisie, "%[0-9-]s", temp);
       }
       while (ret != 1);
     
       {
          long n = strtol (temp, NULL, 10);
     
          printf ("La chaine est '%s', soit %ld\n", temp, n);
       }
       return 0;
    }

  2. #2
    Expert éminent
    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
    Par défaut Re: [debutant]strtol & atol
    Citation Envoyé par beloc
    Dans le cas d'un saisie comme sur l'exemple d'Emmanuel

    strtol (temp, NULL, 10) peut être remplacer par atol(temp) ?
    beuh, non (sinon, je l'aurais fait!).

    Les fonctions ato*() ont le statut 'dépréciées' (obsolètes ou deprecated) depuis la normalisation du C aux USA par l'ANSI en 1989 (reprise telle quelle au niveau international par l'ISO en 1990), et leur remplacement par les fonctions strto*() qui gèrent mieux les débordements et autres erreurs à l'exécution...

    Exemple de 'man' pour 'atoi()':

    http://man.developpez.com/man3/atoi.3.php

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Par défaut Re: [debutant]strtol & atol
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par beloc
    Dans le cas d'un saisie comme sur l'exemple d'Emmanuel

    strtol (temp, NULL, 10) peut être remplacer par atol(temp) ?
    beuh, non (sinon, je l'aurais fait!).

    Les fonctions ato*() ont le statut 'dépréciées' (obsolètes ou deprecated) depuis la normalisation du C aux USA par l'ANSI en 1989 (reprise telle quelle au niveau international par l'ISO en 1990), et leur remplacement par les fonctions strto*() qui gèrent mieux les débordements et autres erreurs à l'exécution...

    Exemple de 'man' pour 'atoi()':

    http://man.developpez.com/man3/atoi.3.php


    Y a pas l'équivalent pour convertir en int ?

    Y faux d'office passer par un long ?

    Atol = long
    Atoi = int

    strtol = long
    strtoll = long long

    merci,

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut Re: [debutant]strtol & atol
    Citation Envoyé par beloc
    Y a pas l'équivalent pour convertir en int ?
    Dans la plupart des cas, un cast suffit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       int i = (int) strtol(...);

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Par défaut
    Oki merci,


  6. #6
    Expert éminent
    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
    Par défaut Re: [debutant]strtol & atol
    Citation Envoyé par DaZumba
    Citation Envoyé par beloc
    Y a pas l'équivalent pour convertir en int ?
    Dans la plupart des cas, un cast suffit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       int i = (int) strtol(...);
    En toute rigueur, il faudrait vérifier avant qu'il n'y a pas de débordement...

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Par défaut
    Oki

    merci,

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

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