So che esistono una marea di threads sull'argomento ma alla fine consigliano tutti di utilizzare system("cls") e system("pause") o propongono strani codici.
Che ne dite, si può fare senza (anche tramite link alle API)?
So che esistono una marea di threads sull'argomento ma alla fine consigliano tutti di utilizzare system("cls") e system("pause") o propongono strani codici.
Che ne dite, si può fare senza (anche tramite link alle API)?
Se il tuo emulatore di terminale è basato su vt100 e lo permette potresti usare la sequenza di escape
ESC[2J
Per pulire lo schermo, prova così:
codice:#include <stdio.h> int main() { printf("%c[2J", 27); //27 == ESC }
An infinite number of monkeys typing into GNU emacs would never make a good program.Linus Torvalds
Non è che deve funzionare solo sul mio pc, è un programma che raccoglie un po' di cose utili che devo dare a varie persone...
Eh, boh, vt100 è usato in un sacco di emulatori di terminale, anche su diverse piattaforme.
In ogni caso, se il software è da distribuire sotto forma di sorgenti ti puoi arrangiare facilmente usando delle direttive del preprocessore per scegliere il comando da chiamare per pulire lo schermo.
An infinite number of monkeys typing into GNU emacs would never make a good program.Linus Torvalds
Diciamo che devo darlo a persone che non sanno cos'è compilare un sorgente.
Posso sempre arrangiarmi col system() ma avrei preferito non utilizzarlo...
Eh ma purtroppo ogni sistema fa a modo suo, quindi non credo ci sia un qualcosa di standard per pulire lo schermo![]()
An infinite number of monkeys typing into GNU emacs would never make a good program.Linus Torvalds
Puoi uscirne in questa maniera:
codice:#ifdef _WIN32 #include <windows.h> #else #include <iostream> #endif void ClearScreen() { #ifdef _WIN32 // Codice per Windows // Handle alla console HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // Coordinate a cui resettare il cursore COORD coordScreen = { 0, 0 }; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; if(hConsole==NULL) return; // Ottiene le dimensioni della console corrente if( !GetConsoleScreenBufferInfo( hConsole, &csbi )) return; dwConSize = csbi.dwSize.X * csbi.dwSize.Y; // Riempie lo schermo di spazi if( !FillConsoleOutputCharacter( hConsole, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten )) return; // Ottiene gli attributi di carattere correnti if( !GetConsoleScreenBufferInfo( hConsole, &csbi )) return; // Imposta tutto lo schermo a tali attributi if( !FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )) return; // Sposta il cursore a (0,0) SetConsoleCursorPosition( hConsole, coordScreen ); #else // Fallback sugli escape ANSI std::cout<<"\x1B[2J\x1B[1;1H"; std::cout.flush(); #endif }
Amaro C++, il gusto pieno dell'undefined behavior.
Bel codice! Grazie... Funziona alla grande...
Di niente; per inciso, riguardo al system("pause"): la libreria C++ fornisce solo input bufferizzato, per cui non è possibile (andando di solo standard C++) fare una cosa del tipo "premere un tasto per continuare". Puoi tuttavia fare:
codice:cout<<"Premi Invio per continuare..."; cin.sync(); cin.ignore();![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Il mio era system("pause>nul");
Comunque dopo aver pulito richiede l'inserimento di un numero quindi...