PDA

Visualizza la versione completa : [c++]Cancellare dal main() nel terminale


io.89
14-10-2010, 18:07
Salve ragazzi qualcuno mi sa dire se c qualche istruzione (per un metodo xes.)che cancelli un tot di righe dal terminale mentre il programma in esecuzione.?
esempio (nel mio caso) sto facendo un gioco di carte :



Carta Giocatore::tira(Carta *carteInMano,int n)
{

Carta ScegliCarta;
string val;
string se;
bool ce=false;
bool leggi=false;
cout<<"immettere il valore della carta da scegliere "<<endl;
cin>>val;
cout<<"immettere il segno della carta da scegliere "<<endl;
cin>>se;

do{

if(leggi==true)
{
cin>>val;
cin>>se;
}
leggi=true;
ScegliCarta.setValore(val);
ScegliCarta.setSegno(se);

for(int i=0 ; i<n ; i++)
{
if(carteInMano[i] == ScegliCarta )
{
ce=true;
carteInMano[i]=getJoker();
cout<<"QUESTA E' LA CARTA CHE HAI SCELTO "<<ScegliCarta<<endl;
return ScegliCarta;
}
}
cout<<"RIDIGITA 1) valore 2) segno xk----->HAI TIRATO UNA CARTA CHE NON HAI IN MANO"<<endl;

}while(ce == false);

}


Vorrei che ,se un giocatore sbagliasse piu' di una volta venissero cancellate le righe dal terminale
tipo
cout<<"RIDIGITA 1) valore 2) segno xk----->HAI TIRATO UNA CARTA CHE NON HAI IN MANO"<<endl;
in modo che il gioco non sia confusionario...Ma ordinato ;)
come fare?

Doch88
14-10-2010, 21:29
Se ho capito bene vuoi che il terminale venga pulito di tutto quello che c'era scritto prima...

Allora se sei su Windows ti basta un: system("cls") oppure su Linux: system("clear") ma questi metodi non sono portatili..

potresti provare anche con clrscr() ma con molti compilatori su windows non funziona...

linoma
14-10-2010, 21:44
Una volta si usavano anche le sequenze escape (http://en.wikipedia.org/wiki/ANSI_escape_code#Windows_and_DOS).

Sembra che cn le attuali versione di windows nn vengano considerate, cm nn detto

MItaly
14-10-2010, 22:36
Le sequenze di escape ANSI funzionano su Linux. Su Windows devi usare le API per la gestione della console.

io.89
15-10-2010, 11:10
Grazie potresti per caso dirmi la libreria per system("clear") .cmq io uso linux :)

MItaly
15-10-2010, 11:58
La system (che si trova in <cstdlib>) non va usata per diversi motivi, punto e basta. Se sei su Linux, ti basta scrivere una funzione ClearScreen di questo genere:


void ClearScreen()
{
fputs("\x1B[2J\x1B[1;1H", stdout);
}

io.89
15-10-2010, 17:37
scusa compilando mi esce questo:
provaClear.cpp:6: error: stdout was not declared in this scope
provaClear.cpp:6: error: fputs was not declared in this scope

Non devo includere qualche libreria ???

void ClearScreen()

{
fputs("\x1B[2J\x1B[1;1H", stdout);
}


Inoltre sai spiegarmi che significa ci che c' dentro l 'argomento di fputs??

Alex'87
15-10-2010, 19:45
Originariamente inviato da io.89
Non devo includere qualche libreria ???stdio.h

MItaly
15-10-2010, 22:39
Originariamente inviato da io.89
scusa compilando mi esce questo:
provaClear.cpp:6: error: stdout was not declared in this scope
provaClear.cpp:6: error: fputs was not declared in this scope

Non devo includere qualche libreria ???
Uh, pardon, avevo letto C e avevo usato le funzioni di IO del C. Con il C++ basta fare

void ClearScreen()

{
std::cout<<"\x1B[2J\x1B[1;1H"<<std::flush;
}



Inoltre sai spiegarmi che significa ci che c' dentro l 'argomento di fputs??
Lo puoi scoprire da te digitando al terminale


man 4 console_codes

;)

Loading