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 :

date format "a a a aMMJJ" a une chaine de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut date format "a a a aMMJJ" a une chaine de caractère
    Bonjour a tous,
    je dois réaliser un petit programme pour la fin de ma premiere, celui-ci fini, je me tourne un petit peu sur l'affichage des données dans la console...
    Nous recevons des dates grace a un fichier, j'aurais voulu transformer ma date AAAAMMJJ en JJ/MM/AAAA et la placer dans une chaine genre un char tabdate[] pour pouvoir le resortir plus facilement et ne pas devoir refaire les calculs a chaque impression...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void calcDate(ShiftLu enregShift,char date[])
    {
    	int annee=(enregShift.dateShift/10000);
    	int mois=(enregShift.dateShift/100)%10;
    	int jour=(enregShift.dateShift)%10;
     
    	date[11]=(jour+"/"+mois+"/"+annee);                   //MAUVAIS
     
    }
    ce que je voulais savoir c'etait comment est-ce que je pourrais faire pour pouvoir mettre mes 3 valeurs dans un tableau a une dimension, je sais qu'on peut le faire avec un tableau a double dimension mais j'aimerais pouvoir le faire comme expliqué ci-dessus.
    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par justin2704 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void calcDate(ShiftLu enregShift,char date[])
    {
    	int annee=(enregShift.dateShift/10000);
    	int mois=(enregShift.dateShift/100)%10;
    	int jour=(enregShift.dateShift)%10;
     
    	date[11]=(jour+"/"+mois+"/"+annee);                   //MAUVAIS
     
    }
    ce que je voulais savoir c'etait comment est-ce que je pourrais faire pour pouvoir mettre mes 3 valeurs dans un tableau a une dimension.
    Malheureusement, le C ne dispose pas d'opérateur « natif » pour traiter directement les chaînes, car celles-ci nécessitent en réalité un traitement « lourd », qui dépasse les simples facilités du micro-processeur (opérations arithmétiques sur ses registres) et qui réclame en fait de vraies infrastructures logicielles. Il faut utiliser strcpy(), strncpy(), strcat() et strncat() pour copier et/ou concaténer des chaînes existantes.

    Par contre, dans ton cas, « annee », « mois » et « jour » sont des entiers numériques binaires qui ne sont même pas encore des chaînes de caractères. Les concaténer directement ne donnera donc aucun résultat valable.

    Le plus simple est donc d'utiliser directement sprintf(), voire snprintf() (disponible depuis C99), qui effectuent exactement le même travail que printf() mais qui envoient leur résultat en mémoire plutôt que vers la sortie standard (et donc, par défaut, à l'écran). Soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        char date[11];
     
        snprintf (date,sizeof date,"%02d/%02d/%04d",jour,mois,annee);
    Bon courage.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut
    Merci beaucoup pour votre réponse,j'ai bien utilisé votre fonction, mais visual studio me dit "11 IntelliSense: identifier "snprintf" is undefined ".
    Est ce qu'il y aurait moyen d'avoir une petite explication du pourquoi ? J'ai essayé le sprintf(), snprintf(),_snprintf() et rien ne fonctionne.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Il faut inclure « #include <stdio.h> » en tête de fichier si ce n'est pas déjà fait (nécessaire en principe même pour printf(), mais les compilateurs sont généralement plus tolérants sur ce point). Ensuite, il faudra expliquer au compilateur qu'on travaille explicitement en C99, ce qui devrait d'ailleurs être le cas par défaut en l'absence d'indication explicite.

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    je complèterais la réponse d'Obsidian avec l'utilisation conjointe de sscanf, ce qui du coup simplifie pas mal l'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void calcDate (char *str, char date[]) {
        int jour = 0, mois = 0, annee = 0;
        sscanf(str, "%04d%02d%02d", &annee, &mois, &jour);
        sprintf(date, "%02d/%02d/%04d", jour, mois, annee);
        return;
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2014, 10h24
  2. Ajout d'une quote (') dans une chaine de caractère
    Par moutu91 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/01/2009, 11h58
  3. Réponses: 4
    Dernier message: 28/05/2008, 18h43
  4. Réponses: 3
    Dernier message: 01/02/2006, 18h26
  5. Réponses: 2
    Dernier message: 03/10/2005, 16h23

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