Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    27

    [c++]Cancellare dal main() nel terminale

    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 :

    codice:
    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    45
    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...

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Una volta si usavano anche le sequenze escape.

    Sembra che cn le attuali versione di windows nn vengano considerate, cm nn detto
    Per gli Spartani e Sparta usa spartan Il mio github

  4. #4
    Le sequenze di escape ANSI funzionano su Linux. Su Windows devi usare le API per la gestione della console.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    27

    [c++]libreria system("clear")

    Grazie potresti per caso dirmi la libreria per system("clear") .cmq io uso linux

  6. #6
    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:
    codice:
    void ClearScreen()
    {
        fputs("\x1B[2J\x1B[1;1H", stdout);
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    27
    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 ???
    codice:
    void ClearScreen()
      
    {
      fputs("\x1B[2J\x1B[1;1H", stdout);
    }
    Inoltre sai spiegarmi che significa ciò che c'è dentro l 'argomento di fputs??

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da io.89
    Non devo includere qualche libreria ???
    stdio.h
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    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
    codice:
    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
    codice:
    man 4 console_codes
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.