Như trong tiêu đề. Làm cách nào để xóa bảng điều khiển trong C ++?
Như trong tiêu đề. Làm cách nào để xóa bảng điều khiển trong C ++?
Câu trả lời:
Đối với C ++ thuần túy
Bạn không thể. C ++ thậm chí không có khái niệm về giao diện điều khiển.
Chương trình có thể được in ra máy in, xuất thẳng ra tệp hoặc được chuyển hướng đến đầu vào của chương trình khác cho tất cả những gì nó quan tâm. Ngay cả khi bạn có thể xóa bảng điều khiển bằng C ++, nó sẽ khiến những trường hợp đó trở nên lộn xộn hơn đáng kể.
Xem mục này trong Câu hỏi thường gặp về comp.lang.c ++:
Hệ điều hành cụ thể
Nếu vẫn có ý nghĩa khi xóa bảng điều khiển trong chương trình của bạn và bạn quan tâm đến các giải pháp cụ thể của hệ điều hành, thì chúng vẫn tồn tại.
Đối với Windows (như trong thẻ của bạn), hãy xem liên kết này:
Chỉnh sửa: Câu trả lời này trước đây đã đề cập đến việc sử dụng system("cls");
, bởi vì Microsoft cho biết làm điều đó. Tuy nhiên, nó đã được chỉ ra trong các bình luận rằng đây không phải là một điều an toàn để làm . Tôi đã xóa liên kết đến bài viết của Microsoft vì sự cố này.
Thư viện (hơi di động)
ncurses là một thư viện hỗ trợ thao tác trên bảng điều khiển:
system
và thêm liên kết vào bài viết của bạn giải thích lý do.
Đối với Windows, thông qua API Console:
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);
}
Nó vui vẻ bỏ qua tất cả các lỗi có thể xảy ra, nhưng này, nó đang xóa bảng điều khiển. Không giống như system("cls")
xử lý lỗi tốt hơn.
Đối với * nixes, bạn thường có thể sử dụng mã thoát ANSI, vì vậy nó sẽ là:
void clear() {
// CSI[2J clears screen, CSI[H moves the cursor to top-left corner
std::cout << "\x1B[2J\x1B[H";
}
Sử dụng system
cho điều này chỉ là xấu xí.
echo
qua system()
thay vì viết vào stdout.
system()
là một sai lầm phổ biến. Vì vậy, cũng là phương pháp được đề xuất của bạn cho Unices. Đây là những gì người ta nên làm trên hệ thống POSIX. Bạn đã hiểu đúng phần Win32, mặc dù bạn không kết hợp quy ước "cuộn lại".
Đối với Linux / Unix và có thể một số khác nhưng không dành cho Windows trước 10 TH2:
printf("\033c");
sẽ thiết lập lại thiết bị đầu cuối.
xuất nhiều dòng ra bảng điều khiển cửa sổ là vô ích..nó chỉ thêm các dòng trống vào đó. thật đáng buồn, cách dành riêng cho từng cửa sổ và liên quan đến conio.h (và clrscr () có thể không tồn tại, đó cũng không phải là tiêu đề chuẩn) hoặc phương thức 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 );
}
Đối với hệ thống POSIX thì đơn giản hơn, bạn có thể sử dụng ncurses hoặc các hàm đầu cuối
#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;
}
Để xóa màn hình, trước tiên bạn sẽ cần bao gồm một mô-đun:
#include <stdlib.h>
điều này sẽ nhập các lệnh cửa sổ. Sau đó, bạn có thể sử dụng chức năng 'hệ thống' để chạy các lệnh Batch (chỉnh sửa bảng điều khiển). Trên Windows bằng C ++, lệnh xóa màn hình sẽ là:
system("CLS");
Và điều đó sẽ xóa bảng điều khiển. Toàn bộ mã sẽ như thế này:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
Và đó là tất cả những gì bạn cần! Chúc may mắn :)
stdlib.h
được chỉ định bởi tiêu chuẩn C, và không liên quan gì đến "nhập lệnh cửa sổ" cũng như thực sự là chính Windows. Ngoại trừ cái nitpicking đó, bạn vẫn ổn.
Trong Windows:
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
Trong Linux / Unix:
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
Sử dụng system("cls")
để xóa màn hình:
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
Điều này khó thực hiện trên MAC vì nó không có quyền truy cập vào các chức năng cửa sổ có thể giúp xóa màn hình. Cách khắc phục tốt nhất của tôi là lặp lại và thêm dòng cho đến khi thiết bị đầu cuối rõ ràng và sau đó chạy chương trình. Tuy nhiên, điều này không hiệu quả hoặc thân thiện với bộ nhớ nếu bạn sử dụng nó chủ yếu và thường xuyên.
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
Trong Windows, chúng tôi có nhiều tùy chọn:
clrscr () (Tệp Tiêu đề: conio.h)
system ("cls") (Tệp Tiêu đề: stdlib.h)
Trong Linux, sử dụng hệ thống ("clear") (Tệp Tiêu đề: stdlib.h)
Đây là một cách đơn giản để làm điều đó:
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
Sử dụng Hệ thống :: Console :: Clear ();
Điều này sẽ xóa (trống) bộ đệm
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
}
Chỉ gọi cls () ở bất cứ đâu
Bạn có thể sử dụng phương thức bảng điều khiển rõ ràng của hệ điều hành thông qua system ("");
đối với windows nó sẽ là system ("cls"); ví dụ
và thay vì phát hành ba mã khác nhau cho các hệ điều hành khác nhau. chỉ cần tạo một phương thức để lấy những gì hệ điều hành đang chạy.
bạn có thể làm điều này bằng cách phát hiện nếu các biến hệ thống duy nhất tồn tại với #ifdef,
ví dụ:
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
}
chỉnh sửa: hoàn toàn làm lại câu hỏi
Đơn giản chỉ cần kiểm tra hệ thống họ đang sử dụng và gửi lệnh hệ thống tùy thuộc vào hệ thống. mặc dù điều này sẽ được đặt tại thời điểm biên dịch
#ifdef __WIN32
system("cls");
#else
system("clear"); // most other systems use this
#endif
Đây là một phương pháp hoàn toàn mới!
cout
có thể đã được chuyển hướng đến một tệp. Sau đó, không có khái niệm về một bảng điều khiển nào cả.
sử dụng: clrscr ();
#include <iostream>
using namespace std;
int main()
{
clrscr();
cout << "Hello World!" << endl;
return 0;
}
Cách dễ nhất là xả luồng nhiều lần (lý tưởng là lớn hơn bất kỳ bảng điều khiển nào có thể) 1024 * 1024 có thể là một kích thước mà không một cửa sổ bảng điều khiển nào có được.
int main(int argc, char *argv)
{
for(int i = 0; i <1024*1024; i++)
std::cout << ' ' << std::endl;
return 0;
}
Vấn đề duy nhất với điều này là con trỏ phần mềm; thứ nhấp nháy đó (hoặc thứ không nhấp nháy) tùy thuộc vào nền tảng / bảng điều khiển sẽ nằm ở cuối bảng điều khiển, trái ngược với phần trên cùng của nó. Tuy nhiên, điều này hy vọng sẽ không bao giờ gây ra bất kỳ rắc rối nào.