Aller au contenu

Incompréhensible


Patrick_35

Messages recommandés

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 faire

Pourtant 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité