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 :

Programme d'heure


Sujet :

C

  1. #21
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Pourquoi le 'DO' 'WHILE', le 2eme .. ?

  2. #22
    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 Fl0r3nt
    Pourquoi le 'DO' 'WHILE', le 2eme .. ?
    Merci d'utiliser la touche [Citer]. On ne sait pas de quoi tu parles.

  3. #23
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Fl0r3nt
    Pourquoi le 'DO' 'WHILE', le 2eme .. ?
    Pour la même raison que le 1er... Pour permettre de faire le code du corps de la boucle au moins une fois...

  4. #24
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <stdio.h>
    #include <time.h>
     
     
    int main(void)
    { 
        char s[32]; //
        struct tm tm = {0};
        time_t A;
        time_t B;
        double R;
     
     
    // Structure tm initialisée :
        tm.tm_sec = 0; // Initialisé car non demandé
        // tm.tm_min = 0; --> Demandé à l'utilisateur
        //tm.tm_hour = 0; --> Demandé à l'utilisateur
        // tm.tm_wday = -1; --> Calculé par mktime()
        // tm.tm_yday = -1; --> Calculé par mktime()
        tm.tm_year = 1970 - 1900; // Initialisé car non demandé
        tm.tm_mon = 1 - 1; // Initialisé car non demandé
        tm.tm_mday = 1; // Initialisé car non demandé
        tm.tm_isdst = -1; // Initialisé car non demandé
     
    int n;
    do { 
       printf("Entrez l'heure sous la forme : (hh:mm)");
       fflush (stdin);
       fgets (s, sizeof s, stdin);
       // Nombres d'arguments pour n
       n = sscanf (s ,"%d:%d" ,&tm.tm_hour,&tm.tm_min ); }
    while (n != 2 || tm.tm_hour > 23 || tm.tm_min > 59);
     
     A = mktime (&tm);
     
    do { 
       printf("Entrez l'heure sous la forme : (hh:mm)");
       fflush (stdin);
       fgets (s, sizeof s, stdin);
       // Nombres d'arguments pour n
       n = sscanf (s ,"%d:%d" ,&tm.tm_hour,&tm.tm_min ); }
    while (n != 2 || tm.tm_hour > 23 || tm.tm_min > 59);
     
     B = mktime (&tm);
     
     R = difftime(B,A);
     
     printf ("\n%d\n", R);
     
    return 0;
    }
    Comme quoi j'avance peu à peu.

    Encore un petit soucis
    Maintenant, quand je compile, j'ai "0" en résultat.
    Quelle erreur ais-je pu faire ?

  5. #25
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Quelle erreur ais-je pu faire ?
    En compilant avec -Wall,

    time.c:49: warning: format '%d' expects type 'int', but argument 2 has type 'double'
    Mets plutôt

    Jc

  6. #26
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Ca bug plus .... ouin ... si ca bug encore.


    Entrez l'heure sous la forme : (hh:mm)12:45
    Entrez l'heure sous la forme : (hh:mm)12:40

    -300.000000

  7. #27
    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 Fl0r3nt
    Ca bug plus .... ouin ... si ca bug encore.

    Entrez l'heure sous la forme : (hh:mm)12:45
    Entrez l'heure sous la forme : (hh:mm)12:40

    -300.000000
    Quel bug ? -5 minutes x 60 = -300 secondes. Pour moi, c'est correct.

    T'aimes pas les 0 ? Mets "%.0f"

    T'aimes pas le '-' ? Mets un test pour que la 2ème valeur soit >= à la première. Soit plus clair dans tes 'prompts'...

    Supprime les 'fflush (stdin)'. fflush() n'a de sens que sur les flux sortants.

  8. #28
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Quel bug ? -5 minutes x 60 = -300 secondes. Pour moi, c'est correct.

    T'aimes pas les 0 ? Mets "%.0f"

    T'aimes pas le '-' ? Mets un test pour que la 2ème valeur soit >= à la première. Soit plus clair dans tes 'prompts'...

    Supprime les 'fflush (stdin)'. fflush() n'a de sens que sur les flux sortants.
    A oui, j'avais pas fait le lien, c'est le "-" qui m'a inquiété ;-) Je vais faire un test.
    Je vais modifier mes prompts. C'est vrai que c'est pas très clair.

    Par contre, pour le fflush(), je ne comprends pas. Tu l'avais utilisé dans ton exemple page 1 de ce post. J'ai du louper qqchose ...

  9. #29
    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 Fl0r3nt
    Citation Envoyé par -ed-
    Supprime les 'fflush (stdin)'. fflush() n'a de sens que sur les flux sortants.
    Par contre, pour le fflush(), je ne comprends pas. Tu l'avais utilisé dans ton exemple page 1 de ce post.
    Exact, erreur de ma part. (corrigé).

    http://emmanuel-delahaye.developpez....#fflush_stdout

  10. #30
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Voici une autre ébauche :

    #include <stdio.h>
    #include <time.h>

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    int main(void)
    { 
        char s[32]; //
        struct tm tm = {0};
        time_t A;
        time_t B;
        double R;
     
     
    // Structure tm initialisée :
        tm.tm_sec = 0; // Initialisé car non demandé
        // tm.tm_min = 0; --> Demandé à l'utilisateur
        //tm.tm_hour = 0; --> Demandé à l'utilisateur
        // tm.tm_wday = -1; --> Calculé par mktime()
        // tm.tm_yday = -1; --> Calculé par mktime()
        tm.tm_year = 1970 - 1900; // Initialisé car non demandé
        tm.tm_mon = 1 - 1; // Initialisé car non demandé
        tm.tm_mday = 1; // Initialisé car non demandé
        tm.tm_isdst = -1; // Initialisé car non demandé
     
    int n;
     
    do {
     
    do { 
       printf("Entrez l'heure d'arrivee sous la forme (hh:mm) : ");
       fgets (s, sizeof s, stdin);
       // Nombres d'arguments pour n
       n = sscanf (s ,"%d:%d" ,&tm.tm_hour,&tm.tm_min ); }
    while (n != 2 || tm.tm_hour > 23 || tm.tm_min > 59);
     
     A = mktime (&tm);
     
    do { 
       printf("Entrez l'heure de départ sous la forme (hh:mm) : ");
       fgets (s, sizeof s, stdin);
       // Nombres d'arguments pour n
       n = sscanf (s ,"%d:%d" ,&tm.tm_hour,&tm.tm_min ); }
    while (n != 2 || tm.tm_hour > 23 || tm.tm_min > 59);
     
     B = mktime (&tm);
     
    }
    while (B < A);
     
     R = difftime(B,A);
     
     
    int temps = R;
     
     
    int t_heu = 0;
    int t_min = 0;
     
     
    while (temps >= 60) { 
          t_min = t_min + 1;
          temps = temps - 60;
          };
     
    while ( t_min >= 60 ){ 
          t_heu = t_heu + 1;
          t_min = t_min - 60;
          };
     
    printf("\nHeures : %d -> Minutes : %d", t_heu,t_min);     
     
    return 0;
    }

  11. #31
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (temps >= 60) {
          t_min = t_min + 1;
          temps = temps - 60;
          };
     
    while ( t_min >= 60 ){
          t_heu = t_heu + 1;
          t_min = t_min - 60;
          };
    N'est pas très astucieux...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t_heu = temps/3600;
    t_min = (temps%3600)/60;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    t_heu = temps/3600;
    t_min = (temps- t_heu*3600)/60;
    Me semble mieux,
    Jc

  12. #32
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    ah oui ... pardon .... j'y avais même pas penser.
    Quel idiot ;-)

    Merci.

  13. #33
    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 Fl0r3nt
    Voici une autre ébauche :
    Bien lire mes commentaires (-ed-)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    #include <stdio.h>
    #include <time.h>
     
    int main(void)
    {
       char s[32];
       struct tm tm =
          {
             0
          };
       time_t A;
       time_t B;
     
       /* -ed- eviter les accents dans un source C. Pas portable... */
       // Structure tm initialisee :
       tm.tm_sec = 0; // Initialisé car non demandé
       tm.tm_year = 1970 - 1900; // Initialise car non demande
       tm.tm_mon = 1 - 1; // Initialisé car non demandé
       tm.tm_mday = 1; // Initialisé car non demandé
       tm.tm_isdst = -1; // Initialisé car non demandé
     
       int n;
     
       do
       {
          do
          {
             printf("Entrez l'heure d'arrivee sous la forme (hh:mm) : ");
     
             /* -ed- Ajoute pour la portabilite. Deja explique pourquoi...   */
             fflush(stdout);
     
             fgets (s, sizeof s, stdin);
             // Nombres d'arguments pour n
             n = sscanf (s , "%d:%d" , &tm.tm_hour, &tm.tm_min );
          }
          while (n != 2
                  /* -ed- manque les tests '< 0'. */
                  || tm.tm_hour < 0
                  || tm.tm_hour > 23
                  || tm.tm_min < 0
                  || tm.tm_min > 59
                );
     
          A = mktime (&tm);
     
          /* -ed- repetition de code. Il faut apprendre a faire des fonctions... */
          do
          {
             printf("Entrez l'heure de départ sous la forme (hh:mm) : ");
             fflush(stdout);
     
             fgets (s, sizeof s, stdin);
             // Nombres d'arguments pour n
             n = sscanf (s , "%d:%d" , &tm.tm_hour, &tm.tm_min );
          }
          while (n != 2
                  || tm.tm_hour < 0
                  || tm.tm_hour > 23
                  || tm.tm_min < 0
                  || tm.tm_min > 59
                );
     
          B = mktime (&tm);
     
       }
       while (B < A);
     
       {
          double R = difftime(B, A);
     
          int temps = R;
     
          int t_heu = 0;
          int t_min = 0;
     
          /* -ed- voir correction de 'fearyourself' ... */
          while (temps >= 60)
          {
             t_min = t_min + 1;
             temps = temps - 60;
          };
     
          while ( t_min >= 60 )
          {
             t_heu = t_heu + 1;
             t_min = t_min - 60;
          };
     
          /* -ed-
          printf("\nHeures : %d -> Minutes : %d", t_heu,t_min);
          presentation horrible. Le '\n' se met en fin de ligne... */
          printf("Duree : %02d:%02d\n", t_heu, t_min);
       }
     
       return 0;
    }

  14. #34
    Membre expérimenté
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Merci Emmanuel , je corrige le tout, j'essaye d'améliorer et je republie mon code.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/05/2015, 08h14
  2. [XL-2003] Désamorcer une macro programmée à une heure précise
    Par coklin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/11/2009, 11h18
  3. Comment programmer un rappel sur date et heure
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/05/2007, 18h45
  4. Réponses: 5
    Dernier message: 16/01/2007, 11h07
  5. Programme de gestion d'heure
    Par krfa1 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 30/08/2006, 18h43

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