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 averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

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

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 : 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
    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)
    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
    .

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    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 averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 : 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
    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 ?
    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
    .

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    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 averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    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 averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    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 : 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
    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;
    }
    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
    .

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

  15. #15
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    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 éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    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 : 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
    • 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())
    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
    .

  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