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 un char en int


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut Convertir un char en int
    Bonjour voila jai une chaine de caractere stockée dans un fichier texte, cette chaine contient plusieurs informations.

    Je souhaite extraire le premier caractere de cette chaine qui est un "entier" et le stocké dans un int mais jarrive pas

    voila ce que je fais ,

    pouvez me dire ce qui cloche , merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     fscanf(fichier,"%s",Combinaison);
       printf("\n Combinaison  :  %s  ",Combinaison);
       printf("\n Combinaison[0]  :  %c   ",Combinaison[0]);
       nb_voitures = Combinaison[0] ;
     
       printf("\nNb voitures ---->   %d  \n",nb_voitures);
       getch();
     
       fclose(fichier);
    le premier caractere de la chaine est '5' , quand je fais le denrier printf , nb_voiture = 53 , soit je pense le caractere ascii de '5'

    aidez moi svp

    merci davance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Salut,
    En fesant un cast ?

    Au lieu de cette ligne la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_voitures = Combinaison[0] ;
    Essaie plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_voitures =(int) Combinaison[0] ;
    Gomu.

  3. #3
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_voitures = Combinaison[0]  - '0';
    Edit:
    Ou plutôtquand même un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_voitures = Combinaison[0] < '0' || Combinaison[0] > '9' ? -1 : Combinaison[0] - '0';

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Pierre ta 2eme ligne de code marche mais peux tu me dire ce que tu fais dans cette derniere ? jai pas trop compris la syntaxe.

    Gomu ta syntaxe marche pas , jme demande pourquoi ?

  5. #5
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    Pierre ta 2eme ligne de code marche mais peux tu me dire ce que tu fais dans cette derniere ? jai pas trop compris la syntaxe.
    Le problème doit être ailleurs, parce que ça, ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        char Combinaison[] = {'5'};
        int nb_voitures = Combinaison[0] < '0' || Combinaison[0] > '9' ? -1 : Combinaison[0] - '0';
        printf("%d\n", nb_voitures);
        return EXIT_SUCCESS;
    }
    La norme dit que les caractères de '0' à '9' sont en séquence naturelle. Attention, elle ne dit rien pour les autres caractères. Donc '5'' - '0' vaut 5, comme '0' - '0' vaut 0, '1' - '0' vaut 1, etc.
    Pour la même raison, "Combinaison[0] < '0' || Combinaison[0] > '9'" signifie que Combinaison[0] est un "chiffre". Equivalent à isdigit().
    J'ai décidé de renvoyer -1 quand Combinaison[0] n'est pas un "chiffre".
    condition ? valeurVrai: valeurFaux
    est l'opérateur ternaire. Très pratique.

    PS: si vous voulez nourrir quelques espoirs en informatique, il faut maintenant dépasser le stade du "ça marche pas". Il faut arriver à réduire le problème à un code minimal autonome qui coince, donner le message d'erreur (compilation ou exécution) , communiquer les informations qui sont évidemment utiles, etc...

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    Le problème doit être ailleurs, parce que ça, ça marche:...
    Heu ... il a justement dit que ca marchais

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    Pierre ta 2eme ligne de code marche mais peux tu me dire ce que tu fais dans cette derniere ? jai pas trop compris la syntaxe.
    C'est en fait l'opérateur ternaire ? qu'il a utilisé pour compacter un peu le code, je ne sais pas s'il y a une quelconque optimisation par contre.

    Cet opérateur fonctionne de la manière suivante...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = b < c ? val1 : val2;
    Ici, a reçois la valeur de val1 si b est inférieur à c sinon il recois la valeur de val2

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Pour revenir sur le cast de Gomu ... quelqun sait pourquoi il ne marche pas dans ce cas ? c'est quand meme la methode la plus facile dacces pour de jeunes programmeurs

  9. #9
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    Pour revenir sur le cast de Gomu ... quelqun sait pourquoi il ne marche pas dans ce cas ? c'est quand meme la methode la plus facile dacces pour de jeunes programmeurs
    Encore le problème du "ça ne marche pas" sans autre précision. A mon avis le cast "marche", mais il ne fait pas autre chose que ... caster, c'est à dire forcer au transtypage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
        char c = '5';
        int  i = (int)c;
        int  j = c;
        printf("%d  %d  %d\n", c, i, j);
        return EXIT_SUCCESS;
    }
    Le cast du i transforme la valeur du char c (53) en un int de valeur 53. Notez que ce cast est inutile, la promotion du char en int étant automatique et "silencieuse".
    Utiliser c - '0' est une "ruse" autorisée par la norme. La méthode normale serait d'utiliser atoi() ou strto?(), mais ces fonctions prennent une chaîne en argument, et non un char, ou un int. Il est possible qu'une fonction prenant un char existe, mais elle m'aurait échappé...

Discussions similaires

  1. [BCB6]Convertir un char en int
    Par Draner dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2008, 10h52
  2. convertir un char en int
    Par boby666 dans le forum C
    Réponses: 4
    Dernier message: 30/12/2007, 11h08
  3. [(cast)] convertir un char en int...
    Par APoLLoN1234 dans le forum C++
    Réponses: 12
    Dernier message: 15/03/2006, 23h15
  4. convertir un char en int / et prob d'espace
    Par yanchasp dans le forum C++
    Réponses: 20
    Dernier message: 07/02/2006, 19h17
  5. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23

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