Seperti pada judulnya. Bagaimana cara menghapus konsol di C ++?
Seperti pada judulnya. Bagaimana cara menghapus konsol di C ++?
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:
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.
echo
via system()
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.
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
}
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" ) );
}
// #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;
}
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 :)
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;
}
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);
}
Gunakan system("cls")
untuk membersihkan layar:
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
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)
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
}
Gunakan System :: Console :: Clear ();
Ini akan menghapus (mengosongkan) buffer
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
}
Panggil saja cls () di mana saja
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
}
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!
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;
}
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.