Seperti pada judulnya. Bagaimana cara menghapus konsol di C ++?
c++
windows
console-application
dev-c++
Thomas B
sumber
sumber
Jawaban:
Untuk C ++ murni
Tidak boleh. C ++ bahkan tidak memiliki konsep konsol.
Program ini dapat mencetak ke printer, mengeluarkan langsung ke file, atau dialihkan ke input program lain untuk semua itu. Bahkan jika Anda dapat menghapus konsol di C ++, itu akan membuat kasus tersebut jauh lebih berantakan.
Lihat entri ini di FAQ comp.lang.c ++:
Khusus OS
Jika masih masuk akal untuk menghapus konsol dalam program Anda, dan Anda tertarik dengan solusi khusus sistem operasi, solusi tersebut memang ada.
Untuk Windows (seperti pada tag Anda), lihat tautan ini:
Sunting: Jawaban ini disebutkan sebelumnya menggunakan
system("cls");
, karena Microsoft mengatakan untuk melakukan itu. Namun telah ditunjukkan dalam komentar bahwa ini bukanlah hal yang aman untuk dilakukan . Saya telah menghapus tautan ke artikel Microsoft karena masalah ini.Perpustakaan (agak portabel)
ncurses adalah pustaka yang mendukung manipulasi konsol:
sumber
system
, dan menambahkan tautan ke artikel Anda yang menjelaskan alasannya.Untuk Windows, melalui Console API:
void clear() { COORD topLeft = { 0, 0 }; HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO screen; DWORD written; GetConsoleScreenBufferInfo(console, &screen); FillConsoleOutputCharacterA( console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written ); FillConsoleOutputAttribute( console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, topLeft, &written ); SetConsoleCursorPosition(console, topLeft); }
Ini dengan senang hati mengabaikan semua kemungkinan kesalahan, tapi hei, ini membersihkan konsol. Tidak seperti
system("cls")
menangani kesalahan dengan lebih baik.Untuk * nix, Anda biasanya dapat menggunakan kode escape ANSI, jadi itu adalah:
void clear() { // CSI[2J clears screen, CSI[H moves the cursor to top-left corner std::cout << "\x1B[2J\x1B[H"; }
Menggunakan
system
untuk ini hanya jelek.sumber
echo
viasystem()
alih-alih menulis ke stdout.system()
adalah kesalahan umum. Jadi, juga, adalah metode yang Anda sarankan untuk Unices. Inilah yang harus dilakukan pada sistem POSIX. Anda mendapatkan bagian Win32 dengan benar, meskipun Anda tidak memasukkan konvensi "gulir kembali".Untuk Linux / Unix dan mungkin beberapa yang lain tetapi tidak untuk Windows sebelum 10 TH2:
printf("\033c");
akan mengatur ulang terminal.
sumber
Cara termudah bagi saya tanpa harus menemukan kembali roda.
void Clear() { #if defined _WIN32 system("cls"); #elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__) system("clear"); #elif defined (__APPLE__) system("clear"); #endif }
sumber
TERM environment variable not set.
mengeluarkan beberapa baris ke konsol jendela tidak berguna..itu hanya menambahkan baris kosong ke sana. Sayangnya, caranya adalah khusus windows dan melibatkan conio.h (dan clrscr () mungkin tidak ada, itu juga bukan header standar) atau metode Win API
#include <windows.h> void ClearScreen() { HANDLE hStdOut; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD count; DWORD cellCount; COORD homeCoords = { 0, 0 }; hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); if (hStdOut == INVALID_HANDLE_VALUE) return; /* Get the number of cells in the current buffer */ if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return; cellCount = csbi.dwSize.X *csbi.dwSize.Y; /* Fill the entire buffer with spaces */ if (!FillConsoleOutputCharacter( hStdOut, (TCHAR) ' ', cellCount, homeCoords, &count )) return; /* Fill the entire buffer with the current colors and attributes */ if (!FillConsoleOutputAttribute( hStdOut, csbi.wAttributes, cellCount, homeCoords, &count )) return; /* Move the cursor home */ SetConsoleCursorPosition( hStdOut, homeCoords ); }
Untuk sistem POSIX ini jauh lebih sederhana, Anda dapat menggunakan ncurses atau fungsi terminal
#include <unistd.h> #include <term.h> void ClearScreen() { if (!cur_term) { int result; setupterm( NULL, STDOUT_FILENO, &result ); if (result <= 0) return; } putp( tigetstr( "clear" ) ); }
sumber
// #define _WIN32_WINNT 0x0500 // windows >= 2000 #include <windows.h> #include <iostream> using namespace std; void pos(short C, short R) { COORD xy ; xy.X = C ; xy.Y = R ; SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE), xy); } void cls( ) { pos(0,0); for(int j=0;j<100;j++) cout << string(100, ' '); pos(0,0); } int main( void ) { // write somthing and wait for(int j=0;j<100;j++) cout << string(10, 'a'); cout << "\n\npress any key to cls... "; cin.get(); // clean the screen cls(); return 0; }
sumber
Untuk membersihkan layar, Anda perlu memasukkan modul terlebih dahulu:
#include <stdlib.h>
ini akan mengimpor perintah windows. Kemudian Anda dapat menggunakan fungsi 'sistem' untuk menjalankan perintah Batch (yang mengedit konsol). Pada Windows di C ++, perintah untuk membersihkan layar adalah:
system("CLS");
Dan itu akan menghapus konsol. Seluruh kode akan terlihat seperti ini:
#include <iostream> #include <stdlib.h> using namespace std; int main() { system("CLS"); }
Dan hanya itu yang Anda butuhkan! Semoga berhasil :)
sumber
stdlib.h
ditentukan oleh standar C, dan tidak ada hubungannya dengan "mengimpor perintah windows" atau memang Windows itu sendiri. Selain itu, Anda baik-baik saja.Di Windows:
#include <cstdlib> int main() { std::system("cls"); return 0; }
Di Linux / Unix:
#include <cstdlib> int main() { std::system("clear"); return 0; }
sumber
Ini sulit dilakukan pada MAC karena tidak memiliki akses ke fungsi windows yang dapat membantu membersihkan layar. Perbaikan terbaik saya adalah mengulang dan menambahkan baris sampai terminal bersih dan kemudian menjalankan program. Namun ini tidak seefisien atau ramah memori jika Anda menggunakan ini terutama dan sering.
void clearScreen(){ int clear = 5; do { cout << endl; clear -= 1; } while (clear !=0); }
sumber
Gunakan
system("cls")
untuk membersihkan layar:#include <stdlib.h> int main(void) { system("cls"); return 0; }
sumber
Di Windows kami memiliki beberapa opsi:
clrscr () (File Header: conio.h)
system ("cls") (File Header: stdlib.h)
Di Linux, gunakan system ("clear") (File Header: stdlib.h)
sumber
Berikut cara sederhana untuk melakukannya:
#include <iostream> using namespace std; int main() { cout.flush(); // Flush the output stream system("clear"); // Clear the console with the "system" function }
sumber
Gunakan System :: Console :: Clear ();
Ini akan menghapus (mengosongkan) buffer
sumber
#include <cstdlib> void cls(){ #if defined(_WIN32) //if windows system("cls"); #else system("clear"); //if other #endif //finish
}
Panggil saja cls () di mana saja
sumber
Anda dapat menggunakan metode konsol jelas sistem operasi melalui system ("");
untuk windows itu akan menjadi system ("cls"); misalnya
dan bukannya merilis tiga kode berbeda untuk sistem operasi yang berbeda. buat saja metode untuk mendapatkan os apa yang sedang berjalan.
Anda dapat melakukan ini dengan mendeteksi apakah ada variabel sistem unik dengan #ifdef
mis
enum OPERATINGSYSTEM = {windows = 0, mac = 1, linux = 2 /*etc you get the point*/}; void getOs(){ #ifdef _WIN32 return OPERATINGSYSTEM.windows #elif __APPLE__ //etc you get the point #endif } int main(){ int id = getOs(); if(id == OPERATINGSYSTEM.windows){ system("CLS"); }else if (id == OPERATINGSYSTEM.mac){ system("CLEAR"); } //etc you get the point }
sumber
edit: pertanyaan ulang sepenuhnya
Cukup uji sistem tempat mereka berada dan kirim perintah sistem tergantung pada sistem. meskipun ini akan disetel pada waktu kompilasi
#ifdef __WIN32 system("cls"); #else system("clear"); // most other systems use this #endif
Ini adalah metode yang benar-benar baru!
sumber
cout
mungkin telah dialihkan ke file. Maka tidak ada konsep konsol sama sekali.gunakan: clrscr ();
#include <iostream> using namespace std; int main() { clrscr(); cout << "Hello World!" << endl; return 0; }
sumber
Cara termudah adalah dengan menyiram streaming beberapa kali (idealnya lebih besar dari konsol yang mungkin) 1024 * 1024 kemungkinan adalah ukuran yang tidak pernah dimiliki jendela konsol.
int main(int argc, char *argv) { for(int i = 0; i <1024*1024; i++) std::cout << ' ' << std::endl; return 0; }
Satu-satunya masalah dengan ini adalah kursor perangkat lunak; Benda yang berkedip (atau benda yang tidak berkedip) tergantung pada platform / konsol akan berada di ujung konsol, berlawanan dengan bagian atasnya. Namun semoga ini tidak menimbulkan masalah.
sumber