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 :

Question sur Printf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 1
    Par défaut Question sur Printf
    Bonjour,

    Existe-t-il la possibilté de formater un entier pour représenter un horaire ?

    Par exemple

    int myHour = 1200;

    Affichage après printf 12:00

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Pas à ma connaissance (mais je ne sais pas tout ).

    Par contre "int myHour = 1275;" tu le gères comment ?

    L'utilisateur n'a pas le droit de le faire ou bien c'est à printf et son éventuel format de le gérer ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    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
    Citation Envoyé par mino99 Voir le message
    Bonjour,

    Existe-t-il la possibilté de formater un entier pour représenter un horaire ?

    Par exemple

    int myHour = 1200;

    Affichage après printf 12:00

    Merci
    C'est un peu plus compliqué que ça. Il faut une structure struct tm (<time.h>), initialiser les champs avec des valeurs valides, mettre les champs voulus à la valeur voulue (heures, minutes, secondes), appeler mktime() qui va mettre de l'ordre dans tout ça, puis appeler strftime() pour formater la chaine. Enfin, afficher la chaine.

    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
     
    #include <stdio.h>
    #include <time.h>
     
    int main (void)
    {
       time_t t = time (NULL);
       struct tm tm = *localtime (&t);
     
       tm.tm_hour = 12;
       tm.tm_min = 00;
       tm.tm_sec = 00;
     
       {
          t = mktime (&tm);
     
          if (t != (time_t) - 1)
          {
             char s[16];
             strftime (s, sizeof s, "%H:%M", &tm);
             printf ("'%s'\n", s);
          }
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    '12:00'
     
    Process returned 0 (0x0)   execution time : 0.040 s
    Press any key to continue.
    Mais ce qui est rigolo, c'est que mktime() fait un vrai travail de normalisation. Si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       tm.tm_hour = 12;
       tm.tm_min = 75;
       tm.tm_sec = 00;
    ce code sort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '13:15'
     
    Process returned 0 (0x0)   execution time : 0.025 s
    Press any key to continue.
    75 = 60 + 15
    soit 1:15.

    12:00 + 1:15 = 13:15

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    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 480
    Par défaut
    Précisons tout de même que pour résoudre ce cas en particulier (et pas faire une solution générale), un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%02d:%02d\n",myTime/100,myTime%100);
    ... suffit. Évidemment, ça implique un certain nombre de prérequis (on voit tous lesquels), mais ça répond à la question initiale.

Discussions similaires

  1. Question sur printf()
    Par Toutankharton dans le forum C
    Réponses: 4
    Dernier message: 25/11/2006, 13h56
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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