Patrick_35 Posté(e) le 2 février 2004 Posté(e) le 2 février 2004 Il y a un truc que je n'arrive pas a comprendre. Je veux faire afficher un message au niveau de ma ligne de commande et ensuite lancer une boucle. Le problème est que la boucle s'exécute bien mais avant que le message apparaisse sur ma ligne de commande. Tout le contraire de ce que je veux fairePourtant dans mon exemple ci-dessous, ça me parait correcte mais en l’exécutant, que nenni :casstet: (setq total 5 n 0)(princ "\nCeci est un test")(while (< n total) (setq n (1+ n)) (alert (strcat "Boucle indice " (itoa n))))(princ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 2 février 2004 Posté(e) le 2 février 2004 Dans ton exemple, dans la boucle, tu incrémente N, puis tu affiche sa valeur.Dans ce cas la valeur pour N=0 ne seras pas affiché (puisque déjà incrémenté).et l'affichage sera erroné de n+1 tu sortiras de la boucle avec l'affichage de N=5 (ce qui n'est pas strictement < 5) Il te faut inverser tes 2 lignes; incrémentation et affichage. Je pense que tu vas comprendre ton erreur, Allez zou à l'eau! ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 2 février 2004 Auteur Posté(e) le 2 février 2004 Merci de ta réponse rapide mais ce n'est pas ça.Ce que je veux faire afficher en premier est "Ceci est un test" sur ma ligne de commande avant que la boucle se lance et affiche mon indice d'incrémentation @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 2 février 2004 Posté(e) le 2 février 2004 Excuse, j'ai compris ton problème. Ce n'est pas une erreur de code pour t'en assurer tu peut utiliser la fonction (grread) juste avant ta boucle pour mettre un point d'arrêt à ton prog.Tu verras alors que l'affichage est bien géré avant l'entrée dans ta boucle. Donc je pense que c'est la fonction (alert) qui occasionne ce défaut d'affichage.J'ai bien essayer la fonction (texscr) mais que dalle. La solution qui peut se présenter, si tu veux malgré tout utiliser (alert) et de passer par la fonction (grtext -2 "message") au lieu de (princ) mais ce n'est pas sur la ligne de commande. A moins que quelqu'un ai une autre solution? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 2 février 2004 Auteur Posté(e) le 2 février 2004 Oui grread est pratique et ce n'est pas spécialement la fonction alert que je veux utiliser, mais ça me permet de faire un point d'arrêt, le but du jeu est de lancer une boucle avec beaucoup d'éléments et d'indiquer le pourcentage d'avancement sur ma ligne de commande pour indiquer que le prog tourne et que ce n'est pas planté, mais comme le texte s'affiche à la fin, du coup, ça ne sert plus à rien @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 2 février 2004 Posté(e) le 2 février 2004 Dans ce cas précis, lorsque je veux qu'on se rende compte de l'activitée.Je fais une boucle comme suit; (c'est proche de ta boucle) (defun c:test ( / ) (setq total 5000 n 0) (princ "\nProgramme en cours ...\\") (while (< n total) (cond ((eq (rem n 4) 0) (princ "\rProgramme en cours ...|") ) ((eq (rem n 4) 1) (princ "\rProgramme en cours .../") ) ((eq (rem n 4) 2) (princ "\rProgramme en cours ...-") ) ((eq (rem n 4) 3) (princ "\rProgramme en cours ...\\") ) ) (setq n (1+ n)) ) (princ "\nProgramme terminé !...") (princ)) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 2 février 2004 Auteur Posté(e) le 2 février 2004 Ce n'est malheureusement pas si simple, je ne veux pas faire un défilement de texte, mais faire un retour sur mon texte en utilisant ceci(princ (strcat (chr 8) (chr 8) (chr 8) (chr 8) comb "%")) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 2 février 2004 Auteur Posté(e) le 2 février 2004 Bon, j'ai trouvé comment faire en incluant dans la 1er valeur de la boucle juste un princ, mais je ne comprends toujours pas pourquoi ça n'a pas fonctionné du premier coup et pouquoi il faut ajouter un princ pour que ça marche ??? Merci beaucoup à Bonuscad d’avoir essayé de m’aider :thumbup: Donc voici l ‘exemple corrigé et qui fonctionne @+ (setq total 5 n 0)(princ "\nCeci est un test")(while (< n total) (if (= n 0) (princ)) (setq n (1+ n)) (alert (strcat "Boucle indice " (itoa n))))(princ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant