Extraire deux chiffres d'un un nombre

Résolu
franklin -  
mamiemando Messages postés 34209 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je suis juste debutant en c/c++. je veux un coup de pouce svp.
je voudrais ecrire une fonction qui prend en parametre un int de 6 chiffre par ex(123786) et me renvoi les deux du milieu. ie 37 pour mon exemple.
quelqun peut il maider ?
jen serai reconnaissant

plus precisement je veux pouvoir lire une date sous cette forme par exemple 010209 (1er fev 2009)
et y extraire le mois, le recuprer dans un int
merci d'avance
A voir également:

3 réponses

mamiemando Messages postés 34209 Date d'inscription   Statut Modérateur Dernière intervention   7 896
 
Le plus simple c'est de l'écrire dans un buffer avec un sprintf et de récupérer les morceaux qui t'intéressent.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(){
    int x = 123456,y;
    char buffer[7];  // contiendra "123456\0"
    char buffer2[3]; // contiendra "34\0"
    sprintf(buffer,"%i",x);
    if(strlen(buffer) == 6){
        strncpy(buffer2,buffer + 2 ,2); // copie buffer[2] et buffer[3] dans buffer2
        buffer2[2] = '\0';
        y = atoi(buffer2);
        printf("y = %d\n",y);
    }
    return 0;
}

Pour plus de détails cherche dans google :
man sprintf
man strlen
man strncpy
man atoi

Bonne chance
1
franklin1984he Messages postés 10 Statut Membre
 
merci pour le bout de code ca compile et ca marche.
mais jaimerai comprendre quelque chose
si je donne la valeur x 120309, alors ca affiche y =3;
pour la valeur 121007 ca affiche bien y=10;
pourquoi le 0 nest pa considere dans le premier cas?
et si je voulais absolument le recuper? ie 03?
peut etre que ma preocupation est bete?
merci encore
0
mamiemando Messages postés 34209 Date d'inscription   Statut Modérateur Dernière intervention   7 896
 
Parce que le atoi converti la chaîne "03" en une valeur numérique (donc 3). Si tu veux vraiment la sous chaîne elle est dans buffer2 et là, le 0 apparaîtra (mais contrairement à y ce sera une chaîne et pas une valeur numérique) et dans ce cas là les deux dernières instructions (atoi, printf) de la boucle ne servent pas, il suffit de faire :
printf("%s\n",buffer2);

Autre possibilité, tu gardes le code actuel et tu fais un :
printf("%02d\n",y);

(où truc dans le genre). Pour plus de détails :
man printf

(dans google ou dans une console linux)

Bonne chance
0
franklin1984he Messages postés 10 Statut Membre
 
merci jai compris et jai resolu mon pb
a plus
0
mamiemando Messages postés 34209 Date d'inscription   Statut Modérateur Dernière intervention   7 896
 
De rien et bonne continuation
0