[C] [Shell] Affichage d'une chaîne de caractères progressivement
Résolu/Fermé
Mathlenor
-
Modifié par jipicy le 5/12/2013 à 11:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 déc. 2013 à 00:08
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 déc. 2013 à 00:08
A voir également:
- [C] [Shell] Affichage d'une chaîne de caractères progressivement
- Caractères ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Plus de chaine tv - Guide
4 réponses
Utilisateur anonyme
Modifié par orinym le 5/12/2013 à 13:19
Modifié par orinym le 5/12/2013 à 13:19
Bonjour, plutôt que printf, tu peux aussi utiliser la fonction "write" (en incluant unistd.h).
Elle prend trois paramètres :
-le file descriptor dans lequel il faut écrire (met 1 pour écrire dans la sortie standard, c'est à dire dans ton terminal).
-un char * qui correspondra au début de la chaine à afficher (donc juste un pointeur vers le caractère à afficher).
-le nombre de caractères à afficher (1 dans ton cas).
De plus, pourquoi passer par T et C? tu peux écrire directement texte[i] dans printf!
Enfin, ton prototype du main stipule que le main renvoie un int, or il n'y a aucun retour à la fin de ta fonction!
Edit: Sleep, et usleep c'est quoi comme fonctions? ;)
Une c'est du shell il me semble et l'autre vient de unistd je crois bien, pas vraiment étonnant si ça ne compile pas.
Sinon pour exécuter une commande shell dans un .c, il y a la fonction system qui prend en paramètre la commande en question. (en incluant stdlib.h)
Elle prend trois paramètres :
-le file descriptor dans lequel il faut écrire (met 1 pour écrire dans la sortie standard, c'est à dire dans ton terminal).
-un char * qui correspondra au début de la chaine à afficher (donc juste un pointeur vers le caractère à afficher).
-le nombre de caractères à afficher (1 dans ton cas).
De plus, pourquoi passer par T et C? tu peux écrire directement texte[i] dans printf!
Enfin, ton prototype du main stipule que le main renvoie un int, or il n'y a aucun retour à la fin de ta fonction!
Edit: Sleep, et usleep c'est quoi comme fonctions? ;)
Une c'est du shell il me semble et l'autre vient de unistd je crois bien, pas vraiment étonnant si ça ne compile pas.
Sinon pour exécuter une commande shell dans un .c, il y a la fonction system qui prend en paramètre la commande en question. (en incluant stdlib.h)
Ah, je ne connaissais pas la fonction write, merci beaucoup !
Pour le passage par T et C, c'était juste une tentative alternative puisque ça ne fonctionnait pas en utilisant texte[i] dans le printf ^^' Mais le problème ne venait pas de là, et je n'ai pas enlevé ce truc avant de poster.
En tout cas, je te remercie pour ta réponse rapide, je vais tester ça de suite.
Pour le passage par T et C, c'était juste une tentative alternative puisque ça ne fonctionnait pas en utilisant texte[i] dans le printf ^^' Mais le problème ne venait pas de là, et je n'ai pas enlevé ce truc avant de poster.
En tout cas, je te remercie pour ta réponse rapide, je vais tester ça de suite.
« un char * qui correspondra au début de la chaine à afficher (donc juste un pointeur vers le caractère à afficher). »
J'ai veillé à bien corriger mon programme, mais le problème persiste : je n'arrive toujours pas à pointer vers i-ème caractère de ma chaîne de caractères pour l'afficher à l'écran.
J'ai bien :
Ma question est donc à présent la suivante : comment je me débrouille avec mon pointeur pour qu'il affiche bien le i-ème caractère de la chaîne correspondant à chaque itération de la boucle ? Car jusque-là, il affiche seulement i fois le premier caractère de la chaîne.
Désolé d'être aussi mauvais, mais merci pour ton aide, j'avance bien !
J'ai veillé à bien corriger mon programme, mais le problème persiste : je n'arrive toujours pas à pointer vers i-ème caractère de ma chaîne de caractères pour l'afficher à l'écran.
J'ai bien :
write (1/*pour écrire dans la sortie standard*/,char *chaine/*j'avoue être dérouté par cette étape, que j'ai citée plus haut*/,1/*pour n'afficher qu'un seul caractère*/);
Ma question est donc à présent la suivante : comment je me débrouille avec mon pointeur pour qu'il affiche bien le i-ème caractère de la chaîne correspondant à chaque itération de la boucle ? Car jusque-là, il affiche seulement i fois le premier caractère de la chaîne.
Désolé d'être aussi mauvais, mais merci pour ton aide, j'avance bien !
Bon, je n'ai pas réussi en passant par la fonction write, mais finalement ça fonctionne très bien avec la fonction printf !
Il suffit juste de :
Si on ne nettoie pas les buffers dans la boucle, il va tout stocker puis afficher à la fin.
Là il affiche tour à tour, ce qui est le résultat que j'attendais !
Il suffit juste de :
printf ("%c", chaine[i]); fflush(stdout);
Si on ne nettoie pas les buffers dans la boucle, il va tout stocker puis afficher à la fin.
Là il affiche tour à tour, ce qui est le résultat que j'attendais !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
6 déc. 2013 à 00:08
6 déc. 2013 à 00:08
Bonjour,
Non, n'utilise pas write(). C'est une fonction non standard. Utilise plutôt printf() comme tu fais ou fprintf() si tu souhaites écrire dans un fichier.
Les variables globales sont déconseillées. Je te conseille de plutôt les mettre en locales.
i=0; entre les deux for est inutile puisque tu initialises i dans la boucle for.
Non, n'utilise pas write(). C'est une fonction non standard. Utilise plutôt printf() comme tu fais ou fprintf() si tu souhaites écrire dans un fichier.
Les variables globales sont déconseillées. Je te conseille de plutôt les mettre en locales.
i=0; entre les deux for est inutile puisque tu initialises i dans la boucle for.