PDA

View Full Version : un comando per pulire lo schermo con il C ?


spedake
11-02-2004, 11:43
ciao! il mio problema è che a casa programmo con il Turbo C++ quindi per pulire lo schermo uso clrscr(), ma all'univ non abbiamo il turbo C e clrscr() non è portabile :muro: !
volendo usare il visual C++ 6, o il dev C++ per Dos/windows
come faccio a pulire lo schermo??? (mi pare che per unix basta usare la funzione system("clear") ... ma sotto windows/dos qual'è il comando per azzerare lo schermo????

:confused:

Bane
11-02-2004, 11:51
Beh, se vuoi continuare ad usare system hai pur sempre system("cls") sotto windows/dos, ma ovviamente non e' un metodo portabile.
Oppure scrivi N righe vuote per far scorrere il testo presente e "pulire" lo schermo.
Non mi viene in mente molto altro al momento... spiacente =)

spedake
11-02-2004, 12:30
Originariamente inviato da Bane
Beh, se vuoi continuare ad usare system hai pur sempre system("cls") sotto windows/dos, ma ovviamente non e' un metodo portabile.
Oppure scrivi N righe vuote per far scorrere il testo presente e "pulire" lo schermo.
Non mi viene in mente molto altro al momento... spiacente =)
ti ringrazio! ho provato system("cls") e funziona una bellezza!
ora sto lavorando sotto windows xp/nt quindi mi va bene :sofico:

fpucci
11-02-2004, 15:35
Prima ti definisci:

#define cls "\033[2J"


e poi fai

printf (cls);

Dovrebbe funzionare, ed è molto più veloce della system() ;)

Ciao

Bane
11-02-2004, 19:18
Dovrebbe funzionare, ed è molto più veloce della system() ;)

Secondo me e' una soluzione troppo "rischiosa" (poco pratica diciamo).
Sotto Win98 se non si carica l'ansi.sys nel config.sys all'avvio non funziona nulla (viene visualizzata la stringa "").
Sotto XP invece... boh, mai provato =)

~Blissard~
11-02-2004, 20:16
clrscr

fpucci
11-02-2004, 20:31
Originariamente inviato da Bane
Secondo me e' una soluzione troppo "rischiosa" (poco pratica diciamo).
Sotto Win98 se non si carica l'ansi.sys nel config.sys all'avvio non funziona nulla (viene visualizzata la stringa "").
Sotto XP invece... boh, mai provato =)

Sinceramente di rischi non ne vedo, e soprattutto è molto pratica in quanto è una soluzione portabile su ogni piattaforma (funziona anche su unix, garantito....).
Si forse hai ragione che bisogna caricare l'ansi.sys.

cionci
11-02-2004, 20:34
Originariamente inviato da ~Blissard~
clrscr
Non è standard... Funziona solo su compilatori Borland...

cionci
11-02-2004, 20:38
Originariamente inviato da fpucci
Si forse hai ragione che bisogna caricare l'ansi.sys.
A me non funziona su Windows 2k... Forse è per questo...

Bane
11-02-2004, 23:18
Originariamente inviato da fpucci
Sinceramente di rischi non ne vedo
[...]

Rischi era fra virgolette, cerco di chiarire meglio il mio pensiero =)

Da me NON funziona dato che normalmente non carico l'ansi.sys e molti altri utenti di Windows non lo usano... lo so per esperienza perche' avevo fatto un programmino che faceva largo uso di questi codici per colori e simili (un tester per un MUD) e, al volo, non funzionava a nessuno, tutti senza ansi.sys caricato =(

Di per se il metodo lo ritengo valido e, soprattutto, hai fatto benissimo a citarlo, ma personalmente (sottolineo "personalmente", non pretendo di dire alcuna verita' assoluta =)) lo utilizzerei solo in casi limite.

Tutto qua =))

fpucci
12-02-2004, 10:45
Originariamente inviato da Bane
Di per se il metodo lo ritengo valido e, soprattutto, hai fatto benissimo a citarlo, ma personalmente (sottolineo "personalmente", non pretendo di dire alcuna verita' assoluta =)) lo utilizzerei solo in casi limite.


Concordo con te.
Diciamo che dipende sempre dal contesto in cui deve essere eseguita l'applicazione.

Anche la mia soluzione è un palliativo (perché comunque usi una printf() e non una primitiva del 'C').

Anche il 'clrscr' citato da Blissard è un ottima soluzione a patto che poi il codice sorgente non debba essere portato su piattaforme dove ci sono altri tipi di compilatori che potrebbero non digerire questa function call che, come detto da cionci, non è standard.

All'epoca del buon vecchio caro DOS (sigh) usavo le primitive del BIOS e/o del S.O. (le chiamate ad interrupt) per eseguire ciò.
Ovviamente, il tutto era limitato ad essere eseguito su PC e non su macchine con architettura diversa dal PC.

Come vedi, ogni cosa ha vantaggi e svantaggi... Sta all'intelligenza di chi scrive il codice a scegliere la soluzione migliore per il suo caso. :)

cionci
12-02-2004, 11:25
Il clrscr c'è solamente sui compilatori Borland... Quindi è ben fuori standard...
Mentre la soluzione con system rispetta lo standard, ma non è indipendente dalla macchina...anche se si può fare molto con una define...
#ifdef WIN32
#define CLEARSCREEN system("cls")
#else
#define CLEARSCREEN sustem("clear")
#endif

~Blissard~
21-02-2004, 12:15
Si trova il file .h clrscr.h in rete che basta includere ed il gioco è fatto ;)