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 :

Compte à rebours avec affichage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut Compte à rebours avec affichage
    Bonsoir à tous,

    Et bien cet fois-ci, c est un compte à rebours que j essaie de coder avec affichage dans la console. Ce que j aimerai au final, c est que la phrase "Il vous reste %ld secondes" s affiche avec seulement le chiffre qui decremente.

    Pour l instant j ai codé ceci:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
     
    int main(int argc, char *argv[])
    {
     
        for( i = 60; i != 0; i--)
     {
        printf("Il vous reste %ld secondes.\n", i);
        sleep(1);
         system ("clear");
     
     }
    return EXIT_SUCCESS;
    }
    Alors pour l instant je suis loin du but recherché car le probleme c est que le system("clear") me fait des saut de lignes impressionnant surement du au \n dans le printf , et en plus toute la phrase se reaffiche (60 fois). Alors j ai viré le system ("clear") pour commencer.

    J utilise kdevelop sous linux, ce qui explique (si j ai bien lu) que j utilise #include <unistd.h> et le system("clear").

    Pourriez vous me donner un petit coups de main.

    Cordialement Shaz

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for( i = 60; i != 0; i--)
    Le "i" n'est pas déclaré dans ta fonction main ! Comment fais tu pour compiler ça?

    Chez moi, il ne reconnait pas non plus la fonction "sleep", mais je n'utilise pas le même logiciel que toi.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    En cherchant un peu, j'ai trouvé une fonction sleep, qui devrait te permettre de faire ce que tu veux.
    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
     
    #include <stdlib.h>
    #include <time.h>
     
    void sleep(int nbr_seconds)
    {
    	clock_t goal;
    	goal = (nbr_seconds * CLOCKS_PER_SEC) + clock();
    	while(goal > clock())
    	{
    		;
    	}
    } 
     
    int main(int argc, char *argv[])
    {
         int i;
        for( i = 60; i != 0; i--)
     {
        printf("Il vous reste %ld secondes.\n", i);
        sleep(1);
     
     
     
     }
    return EXIT_SUCCESS;
    }

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut
    Bonsoir Climoo,

    Effectivement tu as raison j avais oublier de marquer la variable i.(petit oubli)

    J ai essayer ton code , mais il me donne la meme chose que le mien (sans le system("cls") et avec la variable i ).

    J ai meme dû enlever ta fonction sleep car le compilateur m a gentillement dit, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/include/unistd.h:405: error: previous declaration of 'sleep' was here
    . J ai cru comprendre que ta fonction etait celle déjà inclus dans unistd.h.(????)

    D autres idées sont les biens venus.

    Cordialement
    Shaz

  5. #5
    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 shazad Voir le message
    Pour l instant j ai codé ceci:
    Ton code est incomplet...
    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
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:9: error: `i' undeclared (first use in this function)
    C:\dev\hello\main.c:9: error: (Each undeclared identifier is reported only once
    C:\dev\hello\main.c:9: error: for each function it appears in.)
    C:\dev\hello\main.c:12: warning: implicit declaration of function `sleep'
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:6: warning: unused parameter 'argc'
    C:\dev\hello\main.c:6: warning: unused parameter 'argv'
    Process terminated with status 1 (0 minutes, 0 seconds)
    3 errors, 3 warnings
    Ceci fonctionne. Pose des questions si tu ne comprends pas.
    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
     
    #include <stdio.h>
     
    /* http://delahaye.emmanuel.free.fr/clib/ */
    #include "psleep/inc/psleep.h"
     
    int main (void)
    {
       int i;
       for (i = 60; i != 0; i--)
       {
          printf ("\rIl vous reste %2d secondes.", i);
          fflush (stdout);
          msleep (1000);
       }
       return 0;
    }

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut
    Bonjour Emmanuel,

    Et comme d habitude c est parfait, tout fonctionne.

    Alors voilà ce que je comprends:

    Le fichier psleep.h je pense que c est pour la portabilité du code , que ce soit sous windows ou linux j aurai le bon header pour faire fonctionner la fonction sleep().

    Pour la fonction fflush() j ai lu qu elle forcer l ecriture des données se trouvant dans le buffer, alors la j avoue que je me demande pourquoi il faut forcer l ecriture (????). j ai fait un seul essai en l enlevant et le code fonctionne tout de même, mais il y a forcément une bonne raison a sa présence.

    Et donc la fonction msleep() qui permet de faire en sorte que mon for ne se deroule pas en 1/100 de secondes.

    Ah et oui le \r qui m enpêche certainement de faire des sauts de lignes mais plutot de rester sur la même ligne.

    Je te remercis encore.
    Shaz

  7. #7
    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 shazad Voir le message
    Alors voilà ce que je comprends:

    Le fichier psleep.h je pense que c est pour la portabilité du code , que ce soit sous windows ou linux j aurai le bon header pour faire fonctionner la fonction sleep().
    Oui, 'p' comme portable.

    Pour la fonction fflush() j ai lu qu elle forcer l ecriture des données se trouvant dans le buffer, alors la j avoue que je me demande pourquoi il faut forcer l ecriture (????). j ai fait un seul essai en l enlevant et le code fonctionne tout de même, mais il y a forcément une bonne raison a sa présence.
    Oui, c'est parce que la ligne n'est pas terminée par un '\n' :

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


    Et donc la fonction msleep() qui permet de faire en sorte que mon for ne se deroule pas en 1/100 de secondes.
    mais en 1000 millième, soit 1 seconde...

    Ah et oui le \r qui m enpêche certainement de faire des sauts de lignes mais plutot de rester sur la même ligne.
    Oui. Le '\r' est le code de CR (carriage return ou retour chariot. : ramène le curseur en début de ligne sans sauter de ligne.

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut
    Bonjour Emmanuel,

    Merci encore pour tes lumières , des que je peus aller voir le lien sur la fonction fflush() je vais regarder ça, je suis au boulot, je vais regarder ça ce soir.

    Cordialement

    Shaz

  9. #9
    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 shazad Voir le message
    Hier un pingouin a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre ...
    Joli !

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ceci fonctionne. Pose des questions si tu ne comprends pas.
    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
     
    #include <stdio.h>
     
    /* http://delahaye.emmanuel.free.fr/clib/ */
    #include "psleep/inc/psleep.h"
     
    int main (void)
    {
       int i;
       for (i = 60; i != 0; i--)
       {
          printf ("\rIl vous reste %2d secondes.", i);
          fflush (stdout);
          msleep (1000);
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/nicolas/SunStudioProjects/Application_6/newfile.c:11: undefined reference to `msleep'

  11. #11
    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 nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/nicolas/SunStudioProjects/Application_6/newfile.c:11: undefined reference to `msleep'
    Et ? Même le P.O. a compris ce qu'il fallait faire...

  12. #12
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Et ? Même le P.O. a compris ce qu'il fallait faire...
    Comportement indéterminé.

  13. #13
    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 nicolas.sitbon Voir le message
    Comportement indéterminé.
    Pourquoi ? Tu ne sais plus cliquer sur un lien, télécharger du code source... ?

    Qu'est-ce que tu veux démontrer ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] compte à rebours avec changement d'image
    Par ravid87 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2011, 11h41
  2. Une histoire de compte à rebours (avec formulaire)
    Par Olivier14 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 04/03/2009, 13h43
  3. probleme d'affichage d'un compte à rebours
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 16/03/2008, 13h51
  4. Petit compte à rebours avec PHP.
    Par Trinout dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/09/2007, 16h06
  5. Compte à rebours avec Timer
    Par womannosky dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/06/2007, 18h33

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