2010-09-05 35 views
6

Làm cách nào để chúng tôi triển khai clrscr()? Googling nó tôi thấy rằng \x1b[2j có thể được sử dụng để xóa màn hình nhưng làm thế nào để chúng tôi sử dụng nó?Làm cách nào để xóa màn hình bằng x1b [2j?

+5

tùy thuộc vào hệ điều hành và môi trường của bạn nói chung. –

+0

Tôi tự hỏi nếu câu hỏi này có ý nghĩa gì cả. Hoặc bạn tạo một ứng dụng "toàn màn hình", sau đó bạn sẽ biết (nền tảng ... phụ thuộc) cách định vị con trỏ và hơn thế nữa, bao gồm cách xóa màn hình. Hoặc bạn tạo một tiện ích dòng cmd, có vẻ ổn nếu bạn chỉ sử dụng ngắt dòng và có thể backspaces hoặc CRs (cho số dòng vẽ lại trên cùng một vị trí ví dụ) ... – TheBlastOne

Trả lời

5

Thư viện C chuẩn không cung cấp cách xóa màn hình. Bạn cần một thư viện phụ thuộc vào hệ điều hành cho điều đó.

Theo hệ điều hành DOS và Windows, cho một chương trình đang chạy trong một hệ điều hành DOS hoặc Windows giao diện điều khiển, bạn có thể sử dụng các phần mở rộng hệ điều hành DOS/Windows được cung cấp trong thư viện C core xuất xưởng với hệ điều hành:

#include <conio.h> 
clrscr(); 

Dưới hệ thống unix, bạn có thể sử dụng thư viện curses, được cung cấp với hệ điều hành. Các cổng của thư viện curses tồn tại cho hầu hết các hệ điều hành, bao gồm cả Windows, vì vậy đây là cách để đi vào một chương trình di động. Liên kết chương trình của bạn với -lcurses và sử dụng

#include <curses.h> 
erase(); 

Một số thiết bị đầu cuối và giả lập thiết bị đầu cuối thực hiện chức năng đặc biệt như thanh toán bù trừ màn hình khi họ nhận được một dãy thoát. Hầu hết các thiết bị đầu cuối tuân theo tiêu chuẩn ANSI định nghĩa một số chuỗi thoát; "\x1b[2J" là một chuỗi như vậy và hiệu ứng của nó là xóa màn hình. Lưu ý số vốn J. Trên thiết bị đầu cuối như vậy, fputs("\x1b[2J", stdout) xóa màn hình. Đây là thực tế những gì các thư viện nguyền rủa không khi bạn gọi erase() trên một thiết bị đầu cuối như vậy; thư viện curses bao gồm một cơ sở dữ liệu của các kiểu thiết bị đầu cuối và những gì thoát khỏi chuỗi để sử dụng trên các loại khác nhau.

2

Nếu bạn tự tin rằng là chuỗi điều khiển bạn cần phải sử dụng, sau đó:

#include <stdio.h> 

int main(void) 
{ 
    fputs("\x1b[2j", stdout); 
    return(0); 
} 

này cố tình bỏ qua các dòng mới - nhưng bạn có thể được tốt hơn off với việc thêm một sau khi 'j'. Tuy nhiên, như Gilles chỉ ra trong số answer của mình, có nhiều cách khác để làm điều đó có thành tích so với giải pháp này.

+0

doesnt work :(:( –

+0

@fahad: nền tảng nào Nếu bạn đang trên DOS di sản đồng bằng, bạn cần phải có ANSI.SYS nạp cho thoát thiết bị đầu cuối để làm việc.Không chắc chắn về Windows.Trên Unix nó phải luôn luôn làm việc trừ khi bạn có một * thực sự * lẻ thiết bị đầu cuối với phi tiêu chuẩn thoát –

+0

windows là nền tảng của tôi –

0

Trên Windows bạn có thể thử

#include <tchar.h> 
#include <stdio.h> 
#include <windows.h> 

void clrscr(void) 
{ 
HANDLE std_out = GetStdHandle(STD_OUTPUT_HANDLE); 
CONSOLE_SCREEN_BUFFER_INFO cbi; 
COORD origin = {0,0}; 
int buf_length; 

GetConsoleScreenBufferInfo(std_out,&cbi); 
buf_length = cbi.dwSize.X*cbi.dwSize.Y; 
FillConsoleOutputCharacter(std_out,0x20,buf_length,origin,0); 
FillConsoleOutputAttribute(std_out,0x07,buf_length,origin,0); 
} 

int _tmain(int argc, wchar_t *argv[], wchar_t *envp[]) 
{ 
DWORD i; 
_tprintf(TEXT("Clear screen probe...\n")); 
clrscr(); 

return 0; 
} 

"\ x1b [H \ x1b [2J" hoạt động trên OSX.

Các vấn đề liên quan