Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Les \r de 10 à 9

Petit problème...

    12 janvier 2006 à 1:13:29

    Bonjour, J'ai essayé de créer un décompte ou le chiffre change à chaque seconde. La variable compteur est initialisée à 30 et le code est le suivant:

    do {
    Sleep(1000);
    printf("\r\r%ld", compteur);
    compteur--;   
    }
    while(compteur);


    Le problème est que quand il change de 10 à 9 c'est 90 qui s'affiche et non 9. Le 0 du 10 reste. Quelqu'un peut me donner le problème? C'est pour cette raison que le \r est double mais le problème persiste.

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2006 à 2:29:12

      Le problème c'est qu'il y a d'autres choses en haut... Je ne veux pas tout effacer. Ce bout de code n'est qu'une partie du programme.
      • Partager sur Facebook
      • Partager sur Twitter
        12 janvier 2006 à 2:42:15

        Bah tu rajoute un espace :

        do {
        Sleep(1000);
        printf("\r\r%ld ", compteur);
        compteur--;   
        }
        while(compteur);
        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2006 à 12:25:32

          Ça sert à ça les commentaires: mettre de côté des bouts de code sans les supprimer.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            12 janvier 2006 à 16:54:52

            Déja il me semble qu'un seul \r suffit. Ensuite un espace devrait aller car il écraserait ainsi le caractère suivant. Mais ddx39 a oublié de mettre l'espace dans son code :D alors je le remets :
            do {
            Sleep(1000);
            printf("\r %ld", compteur);
            compteur--;   
            }
            while(compteur);
            (éventuellement rajouter un \r mais je ne sais pas si c'est vraiment utile d'en mettre deux).
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 janvier 2006 à 17:53:18

              Une question, à quoi sert
              printf("\r");
              ??
              J'ai bien fait des tests mais..
              • Partager sur Facebook
              • Partager sur Twitter
                12 janvier 2006 à 18:09:30

                si je me trompe pas ca sert a effacer un caractere
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 janvier 2006 à 18:15:13

                  En effet merci!
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 janvier 2006 à 18:16:53

                    Citation : ThE.13eSt

                    si je me trompe pas ca sert a effacer un caractere

                    tu te trompes. \r = retour chariot.

                    ddxTruc : system("cls"), quelle horreur :colere:

                    Louisclem :
                    do {
                    Sleep(1000);
                    printf("\r %ld", compteur);
                    compteur--;   
                    }
                    while(compteur);


                    " 10" ->
                    " 90" ->
                    " 80" logiquement, non?

                    ma solution :
                    do {
                    sleep(1000); // pas de majuscule a la fonction sleep... elle s'appelle pas Sleep mais sleep
                    printf("\r%c%ld", compteur < 10 ? "  " : " ", compteur);
                    compteur--;   
                    }
                    while(compteur);

                    :]
                    ps : j'ai mis 2 espaces puis 1 espace dans la condition, parce que je crois bien que gcc warn si on met ""...


                    [edit] Tout bien reflechi, la solution de mettre un espace après le %ld devrait aussi marcher. A essayer :]
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      12 janvier 2006 à 18:23:37

                      Ze moi > Je précise, \r = retour chariot en fait il revient au début de la ligne, donc écrit par dessus, et quand il reste des caractères sur la ligne ils ne sont pas effacés.

                      victor > Ouais j'ai pas trop réfléchi pour l'espace là :D
                      [edit] ouais je m'embrouile moi, mais l'espace après le %ld marcherait sans doute, juste que quand le nombre est sur deux chiffres il affiche un espace pour rien, sinon il efface bien le chiffre sur la ligne qui est resté.

                      Mais en fait je pense qu'en utilisant bien le printf ça serait possible, par exemple, d'afficher toujours le nombre sur deux chiffre donc il serait rempli avant par des espaces : printf("\r%4ld", compteur); sinon il 'y a en effet pas d'autres solutions qu'une petite condition qui vérifie la taille du nombre.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [C] Les \r de 10 à 9

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown