A voir également:
- [C] [Shell] Affichage d'une chaîne de caractères progressivement
- [C] [Shell] Affichage d'une chaîne de caractères progressivement ✓ - Forum - C
- Découper une chaine de caractère en shell ✓ - Forum - Shell
- Inserer chaine de caractere shell ✓ - Forum - Shell
- Manipulation d'une chaine de caractere shell ✓ - Forum - Shell
- Shell supprimer chaine de caractere ✓ - Forum - Shell
4 réponses
Utilisateur anonyme
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)
Mathlenor
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.
Mathlenor
« 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 !
Mathlenor
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
- 11066
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 18 octobre 2016
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.