Probléme language C - C - Programmation
Marsh Posté le 25-02-2011 à 01:18:25
Est-ce que tu as vu que tu as mis le printf dans la boucle while?
Marsh Posté le 25-02-2011 à 01:28:46
Oui mr simon, mais si je met pas le printf dans la boucle, le texte ne sera jamais afficher car le programme ne rencontre jamais la fin de fichier " EOF" non ?
Marsh Posté le 25-02-2011 à 14:49:03
J'avais lu un peu vite, je croyais que tu utilisais un fichier ...
Je ne sais pas quel est le comportement que tu souhaites, mais si tu mets le printf dans le if qui teste la fin de ligne, ca devrait etre plus lisible.
Sinon, il faut que tu regardes du cote de atexit.
Marsh Posté le 25-02-2011 à 15:23:15
D'accord, merci du conseil.
Mais en soit mon programme fonctionne mais le problème, c'est lorsque je rentre au clavier par exemple : " Salut[espace][entrée]"
Le entrée n'est comptabiliser que dans un second temps.
"Il y a 1 espaces,0 tabulation et 0 fin de ligne
Il y a 1 espace,0 tabulation et 1 fin de ligne"
Alors que l'idéal serait : Il y a 1 espaces,0 tabulation et 1 fin de ligne.
Marsh Posté le 25-02-2011 à 15:50:01
Juste une remarque : il me semble que taper la combinaison "CTRL + D" envoie le caractère EOF.
Marsh Posté le 26-02-2011 à 23:57:15
Merci de l'info shaoyin, mais il y a t-il une solution pour " mon probléme " ?
Merci
Marsh Posté le 27-02-2011 à 10:58:50
Code :
|
Compilé soux XP avec le compilo Digital Mars, et ça donne bien "Il y a 1 espace, 0 tabulation et 1 fin de ligne" quand je tape en entrée "Salut[espace][entrée]".
Mettre le printf a chaque tour de boucle est totalement inutile, vu que stdin est bufferisé, et ne recoit les caractères que ligne à ligne, quand un '\n' a été tapé.
Sous Dos, EOF, c'est CTRL+Z.
A+,
Marsh Posté le 27-02-2011 à 11:12:46
theshockwave a écrit : ton problème, c'est que tu affiches ta ligne pour chaque caractère rencontré. Au lieu de traiter directement caractère par caractère, traite des lignes complètes et affiche le détail de la ligne une fois ton traitement terminé |
Il traite chaque caractère rencontré dans stdin une fois que stdin contient une ligne complète terminée par un '\n', ce qui est complètement inefficace. stdin n'est pas unbuffered (et il y a de bonnes raisons pour, sauf à vouloir gérer le backspace, etc), et il n'existe pas de méthode générale pour intercepter les appuis claviers, sauf a vouloir écrire du code OS+GUI dépendant.
A+,
Marsh Posté le 27-02-2011 à 11:28:32
Merci theshockwave, j'aurai du y penser
Voici mon code au cas ou qu'il y a des reproches, des conseils,etc...
Code :
|
Edit : Effectivement Gilou cela fonctionne, merci des remarques
Marsh Posté le 27-02-2011 à 15:49:14
bill g@te a écrit : Edit : Effectivement Gilou cela fonctionne, merci des remarques |
Si j'avais eu à le faire partant de 0, j'aurais grosso modo procédé ainsi:
Code :
|
A+,
Marsh Posté le 28-02-2011 à 20:33:37
ReplyMarsh Posté le 28-02-2011 à 23:46:07
bill g@te a écrit : Ok merci du code ! |
Tiens, le même genre de code, mais qui n'imprime la ligne qu'à la fin, et qui permet de stopper aussi avec CTRL+C [Sous windows, comme un un CTRL+C vide le buffer, on perd la ligne en cours, (sinon, il faut écrire du code non portable avec <windows.h> et les fonctions de l'API windows), et j'ai fait en sorte que ce soit pareil sous linux, même si sous linux, il y aurait moyen, avec du code un peu plus complexe, de s’arrêter sur un CTRL+C sans perdre la ligne en cours, je pense]
Code :
|
A+,
Marsh Posté le 25-02-2011 à 01:12:28
Bonsoir,
Je voudrais juste un peu d'aide dans un exercice en langage C.
Cette exercice consiste a compter les espaces, les tabulations et les fins de lignes.
Mon code fonctionne mais partiellement, je n'arrive pas a faire en sorte qu'il affiche tout en une ligne.
Merci.
Message édité par bill g@te le 25-02-2011 à 01:14:18