[c] Effacer l'écran

Yggdrasill

Membre actif
20 Octobre 2005
751
21
Liège - Belgique
Bonjour,

J'aimerais savoir deux petite chose :
Le permière, c'est de savoir si Mac Os X charge les codes ansi au boot ou non et la deuxième serait de savoir comment, si c'est faisable, on peut effacer l'ecran dans un programme tournant en console (un equivalent au system ("cls") de windows en gros...).
Au cours, nous avons vu un
Bloc de code:
printf ("\x1B[jj");
mais visiblement ça ne marche pas...(j'ai peut-être mal pris note aussi hein!

SI qq1 aurait une réponses à mes interrogations...

Merci bcp !
 
Une façon "bête et méchante" d'effacer l'écran sur un programme affichant du texte sur console, c'est de lui faire imprimer une vingtaine de lignes vides :

for(i=1;i<21;i++) {printf" \n");}

Mais il existe sûrement des méthodes plus sophistiquées...
 
Pedro a dit:
Une façon "bête et méchante" d'effacer l'écran sur un programme affichant du texte sur console, c'est de lui faire imprimer une vingtaine de lignes vides :

for(i=1;i<21;i++) {printf" \n");}

Mais il existe sûrement des méthodes plus sophistiquées...

J'espère, je doute que ce genre de manipulation soit aprécié par le profs :s.

En ce qui concerne le system ("clear"), j'essayerais demain. Je pensait que stdlib.h ne fonctionnait que sous windows.

Merci !
 
Bonjour,

Si tu travaille en C ANSI, je ne pense pas qu'il existe une commande pour effacer l'écran.

En C ANSI, considere qu'il n'y a pas d'écran, mais plutot une imprimante a marguerite. Tu ne peut donc n'y effacer, ni revenir en arrière. (Mais je crois que tu peut faire beeper l'imprimante avec \b )
A noter que la suggestion d'afficher plusieurs lignes vides, est a mon avis, la seule vraiment standard.

Cordialement
 
ntx a dit:
Oui, car le clear est à réserver aux UNIX ;)

Effectivement, le clear ne marche pas. Je trouve ça bizare, car dans un terminla, clear a bel et bien l'effet escompté...
Et si on devient un peu moins ansi, n'y a t'il pas un moyen d'effacer l'ecran ?
Mon prof m'avait parlé d'une procedure permettant de changer les codes ansi, que l'on soit sous windows ou non, et qu'ainsi on pouvait utiliser les meme commandes pour effacer l'ecran que l'on soit sous win, nux ou mac. Malheureusement il ne sait plus ou il a vu ça...
 
Yggdrasill a dit:
Effectivement, le clear ne marche pas. Je trouve ça bizare, car dans un terminla, clear a bel et bien l'effet escompté...
Et si on devient un peu moins ansi, n'y a t'il pas un moyen d'effacer l'ecran ?
Mon prof m'avait parlé d'une procedure permettant de changer les codes ansi, que l'on soit sous windows ou non, et qu'ainsi on pouvait utiliser les meme commandes pour effacer l'ecran que l'on soit sous win, nux ou mac. Malheureusement il ne sait plus ou il a vu ça...


je pense que ton prof veut parler de ca :
http://www.isthe.com/chongo/tech/comp/ansi_escapes.html

et plus precisement de :
ESC[2J

(normalement ESC est le caractere ASCII 27 décimal)

Codialement
 
Yggdrasill a dit:
Effectivement, le clear ne marche pas. Je trouve ça bizare, car dans un terminla, clear a bel et bien l'effet escompté...
Et si on devient un peu moins ansi, n'y a t'il pas un moyen d'effacer l'ecran ?
Mon prof m'avait parlé d'une procedure permettant de changer les codes ansi, que l'on soit sous windows ou non, et qu'ainsi on pouvait utiliser les meme commandes pour effacer l'ecran que l'on soit sous win, nux ou mac. Malheureusement il ne sait plus ou il a vu ça...


dans un autre domaine, pour conserver mon code portable (mac, unix, pc) je passe par le préprocesseur
une variable à modifier avant la compilation et le code est acclimaté à l'environnement défini !
 
Didier Guillion a dit:
je pense que ton prof veut parler de ca :
http://www.isthe.com/chongo/tech/comp/ansi_escapes.html

et plus precisement de :
ESC[2J

(normalement ESC est le caractere ASCII 27 décimal)

Codialement

C'est exactement ce dont ja parlais. Merci.
sous Linux, ca marche parfaitement, mais sous tiger... c'est une autre histoire. Pour avoir ESC, ce n'est deja plus 1B (27 en decimal) mais 25 (37 en décimal) que je dois taper, mais malgré cela, il affiche stupidement [2J dans mon programme....
 
hopkins a dit:
dans un autre domaine, pour conserver mon code portable (mac, unix, pc) je passe par le préprocesseur
une variable à modifier avant la compilation et le code est acclimaté à l'environnement défini !

Je me permet de preciser ton explication.

Chaque compilateur defini une ou plusieurs constantes de maniere automatique

Astuce: En C les constantes sont toujours écrites en majuscule et uniquement elles, par exemple GCC4 est une constante. Gcc4 autre chose.

Lors de la compilation, on peut faire de la compilation conditionnelle en fonction de l'environnement.
C'est a dire, qu'en fonction de l'environnement où l'on compile, le source compilé sera different.

Par exemple imagine que sur Mac, tu utilise XCode et autre chose sur PC.

Le source C compilé sur Mac aura la constante XCODE définie.

On peut donc écrire
#ifdef XCODE
ClearScreen();
#else
clrscr();
#endif

La fonction ClearScreen sera appellée sur Mac et clrscr ailleurs.

Cordialement
 
Merci bcp pour ton explication, mais je ne comprend pas trop comment utiliser la constante... Dois-je appeller "XCODE" dans mon code (ne marche pas :(), ClearScreen?:confused:

Merci bien !
 
Yggdrasill a dit:
Merci bcp pour ton explication, mais je ne comprend pas trop comment utiliser la constante... Dois-je appeller "XCODE" dans mon code (ne marche pas :(), ClearScreen?:confused:

Merci bien !

L'exemple est juste pour te montrer comment mettre en place une compilation conditionnelle.

Cordialement
 
Didier Guillion a dit:
L'exemple est juste pour te montrer comment mettre en place une compilation conditionnelle.

Cordialement

Ah, ok. Autant pour moi ;)

Mais, si je comprend bien ton exemple, ClearScreen(); devrait, sous Mac, permettre d'éffacer l'écran non? Or chez moi lorsque je tape un ClearScreen, on dirait qu'il ne connait pas cette fonction ! Dois-je inclure un header particulier?

Merci !
 
Yggdrasill a dit:
Ah, ok. Autant pour moi ;)

Mais, si je comprend bien ton exemple, ClearScreen(); devrait, sous Mac, permettre d'éffacer l'écran non? Or chez moi lorsque je tape un ClearScreen, on dirait qu'il ne connait pas cette fonction ! Dois-je inclure un header particulier?

Merci !

Ce que tu cite, c'est juste un exemple de compilation conditionnelle. Tu dois écrire la fonction ClearScreen(), ce n'est pas une fonction prédéfinie.

Cordialement
 
Didier Guillion a dit:
Ce que tu cite, c'est juste un exemple de compilation conditionnelle. Tu dois écrire la fonction ClearScreen(), ce n'est pas une fonction prédéfinie.

Cordialement


Ah ok, merci ! Donc, si j'ai bien compris, seule la methode "bourrine" de Pedro fonctionne...

Je m'en vais coder ça, Merci !:zen:
 
La commande system("clear") fonctionne dans le vrai terminal de Mac OS X, mais pas dans la console de Xcode. Il existe un réglage pour effacer la console Xcode à chaque éxecution du programme

http://forums.macrumors.com/showthread.php?t=178583

De toutes façons, même si clear n'a pas d'effet dans Xcode, la commande fonctionnera lorsque le programme sera éxécuté de façon autonome.
 
ybart a dit:
La commande system("clear") fonctionne dans le vrai terminal de Mac OS X, mais pas dans la console de Xcode. Il existe un réglage pour effacer la console Xcode à chaque éxecution du programme

http://forums.macrumors.com/showthread.php?t=178583

De toutes façons, même si clear n'a pas d'effet dans Xcode, la commande fonctionnera lorsque le programme sera éxécuté de façon autonome.


Ca c'est de la bonne nouvelle ! Merci bcp pour l'info !

Mais puisque j'utilise un system("clear"); je ne devrais pas inclure ncurse.h?

merci !
 
ybart a dit:
La commande system("clear") fonctionne dans le vrai terminal de Mac OS X, mais pas dans la console de Xcode. Il existe un réglage pour effacer la console Xcode à chaque éxecution du programme

http://forums.macrumors.com/showthread.php?t=178583

De toutes façons, même si clear n'a pas d'effet dans Xcode, la commande fonctionnera lorsque le programme sera éxécuté de façon autonome.

l'appel system clear doit faire partie de la norme POSIX non ?