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 :

Afficher des caractères avec le temps


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut Afficher des caractères avec le temps
    Bonjour,

    Le code lui est simple mais je ne trouve pas comment faire pour afficher "BONJOUR" (par exemple) en affichant chaque lettre une par une avec un temps choisi entre chaque lettre.

    Par exemble: B (une demi-seconde) 0 (une demi seconde) .... etc...

    Le temps n'est qu'un exemple, je le ferais peut-etre encore plus rapidement.

    Je vous remercie d'avance, de votre aide.

    Cordialement.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Je crois que la fonction usleep pourrait être utile alors !

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    cela ne donne toujours rien, je vous fournis le code type:
    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
    #include <unistd.h>
    #include <stdio.h>
     
    ;
    int main(void)
    {
       printf ("\n\nB");
       	usleep(500);
       printf("O");
       	usleep(500);
       printf("N");
       	usleep(500);
       printf("J");
    	.
    	.
    	.
    	.
    	.
    	.
     
       return 0;
    }
    Bien sur les . . . . . sont à remplacer par les autres lettres...

  4. #4
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Prolusitano Voir le message
    cela ne donne toujours rien, je vous fournis le code type
    C'est quoi rien, pas d'affichage, ce qui est affiché n'est pas ce qui est attendu, ...

    Pour info, cela fonctionne bien sous Visual Studio 2005 sous Windows (j'ai remplacé usleep par Sleep).

    Peut êrre un effet de la bufferisation comme il n'y a pas de retour chariot en fin de ligne (faire un fflush(stdout) ou équivalent pour forcer l'écriture)

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    si tu remplaces les printf() par write() tel que :
    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
    #include <unistd.h>
    #include <stdio.h>
     
    ;
    int main(void)
    {
       write(1, 'b', 1);
       	usleep(500);
       write(1, 'o', 1);
       	usleep(500);
       write(1, 'n', 1);
       	usleep(500);
       write(1, 'j', 1);
    	.
    	.
    	.
    	.
    	.
    	.
     
       return 0;
    }
    ça donne quoi ?

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    En faite, le code en lui même fonctionne très bien, mais cela n'affiche pas d'abord le "B" puis une demi-seconde après le "O" comme au départ.

    Je suis sous ubuntu 10.04, mais le code que j'ai fournis (l'exemple lui fonctionne bien).

    Je veux juste un code qui affiche à l'écran le contenu du printf mais "comme si quelqu'un était entrain de l'écrire" au lieu de tout afficher d'un block en une fois.

    (Désolé si je paraits redondants, je veux etre sûr d'être bien compris).

  7. #7
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Prolusitano Voir le message
    En faite, le code en lui même fonctionne très bien, mais cela n'affiche pas d'abord le "B" puis une demi-seconde après le "O" comme au départ.
    Alors le code ne fonctionne pas (sous entendu, comme tu le voudrais)

    Citation Envoyé par Prolusitano Voir le message
    Je suis sous ubuntu 10.04, mais le code que j'ai fournis (l'exemple lui fonctionne bien).
    J'avoue que je ne comprends plus, il fonctionne ou pas cet exemple ?

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Si tu augmentes le usleep (car je crois que l'unité est la microseconde) du style usleep(100000) ça ne donne toujours rien ? car je sais pas si 500 µs c'est vraiment perceptible pour l'Homme ^^

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    alors voila le code qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <unistd.h>
    #include <stdio.h>
     
    ;
    int main(void)
    {
       printf ("\n\nB");
       	usleep(5000000);
       printf("O\n");
     
       return 0;
    }
    ce code attend 5 secondes, et affiche "BO" d'un block, alors que je voudrais qu'il affiche "B" et 5 secondes après "O" sur la même ligne.

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Et maintenant que le usleep est assez grand, que se passe t-il si printf est remplacé par write comme indiqué plus haut ?

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    en remplaçant le write, je me fais insulter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Teamud.c: In function ‘main’:
    Teamud.c:7: warning: passing argument 2 of ‘write’ makes pointer from integer without a cast
    /usr/include/unistd.h:363: note: expected ‘const void *’ but argument is of type ‘int’
    Teamud.c:9: warning: passing argument 2 of ‘write’ makes pointer from integer without a cast
    /usr/include/unistd.h:363: note: expected ‘const void *’ but argument is of type ‘int’
    matthieu@EeePc:~/Bureau/Team UD$ write(1, 'o', 1);
    bash: Erreur de syntaxe près du symbole inattendu « 1, »
    Edit: Je vous redonne le code au cas ou avec le write, peut-etre que j'ai fais une connerie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <unistd.h>
    #include <stdio.h>
     
    ;
    int main(void)
    {
       write(1, 'b', 1);
       	usleep(5000000);
       write(1, 'o', 1);
     
     
       return 0;
    }

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    pardon au temps pour moi j'ai écris une grosse boulette ...
    ce n'est pas :
    qu'il faut écrire mais :
    Pardon

    EDIT:
    je m'explique quand même, le dans write(1, "a",1);
    - le premier 1 est correspond au file descriptor donc ou sera écris le message.
    - le deuxième argument n'est pas comme j'ai écris plus haut un char mais un char* (se renseigner plus précisément ici man write)
    - le dernier 1 est la taille de ton argument précédent, ici 1 ^^

    Enfin je crois que ce sujet a à voir avec celui-ci

  13. #13
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Prolusitano Voir le message
    ...
    ce code attend 5 secondes, et affiche "BO" d'un block, alors que je voudrais qu'il affiche "B" et 5 secondes après "O" sur la même ligne.
    Probablement un effet du buffering géré par la libC sur stdout.

    essaye ceci, cela force le flush de stdout :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <unistd.h>
    #include <stdio.h>
    
    int main(void)
    {
       printf ("\n\nB");
       	usleep(5000000);
       	fflush(NULL);
       printf("O\n");
     
       return 0;
    }

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Parfait, Super, boulette réparé, problème résolu! Merci beaucoup!!

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Héhé, trop content trop tot, j'ai un autre problème qui se pose:

    Pour afficher "BONJOUR", je peux etre un peu travailleur et écrire un par un les lettres... Mais imaginons que je veux le même procédé pour un texte de 500 caractères...

    J'ai pensé à une fonction, mais aucune idée de comment la commencer ou comment la manipuler pour qu'elle prenne chaque lettre du texte, qu'elle y mette usleep entre chaque lettre et qu'elle traite ainsi toutes les lettres du texte...

    Quelqu'un aurait une idée d'exemple de fonction que je pourrais prendre?

  16. #16
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Mmhh,

    Une fonction du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WriteStringWithTime(char *myString, int Time)
    Dans ta fonction tu parcours ton mot, ta phrase, phrase ou ton texte jusqu'a ce que tu tombe sur un '\0'.
    à chaque lettre tu l'écris et tu fais un usleep du Time. et paff tu passe à la lettre suivante.

    voili voilou

  17. #17
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    • Ouvrir le fichier d'entrée (avec fopen())
    • lire le fichier caractère par caractère (avec fgetc()) tant que c'est pas la fin du fichier
    • afficher le caractère lu (voir les posts ci dessus)
    • fermer le fichier d'entrée (avec fclose())

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour simuler encore mieux la frappe d'un texte par un individu, on pourrait simuler des fautes de frappe, retours en arrière pour correction, et ça, de façon aléatoire.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/06/2009, 12h16
  2. [Système] supprimer des caractères avec preg_replace
    Par Fritzoune dans le forum Langage
    Réponses: 3
    Dernier message: 02/10/2006, 13h59
  3. [c#] ListView affichant des images updates en temps reel
    Par elguignardo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/05/2006, 11h49
  4. [ImageMagick] Mon image affiche des caractères étranges
    Par renaud26 dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 17/03/2006, 17h37
  5. Réponses: 2
    Dernier message: 21/07/2005, 14h20

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