Extraire deux chiffres d'un un nombre

Résolu
franklin -  
mamiemando Messages postés 33772 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 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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 Date d'inscription   Statut Membre Dernière intervention  
 
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 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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 Date d'inscription   Statut Membre Dernière intervention  
 
merci jai compris et jai resolu mon pb
a plus
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
De rien et bonne continuation
0