2008-10-23 10 views
25

का उपयोग कर दोनों विंडोज़ और लिनक्स में कंसोल को कैसे साफ़ करूं? मुझे सी ++ में लिनक्स और विंडोज दोनों में कंसोल को साफ़ करने के लिए क्रॉस प्लेटफ़ॉर्म समाधान की आवश्यकता है। क्या ऐसा करने में कोई काम है? यह भी ध्यान रखें कि मैं नहीं चाहता कि एंड-यूजर प्रोग्रामर को विंडोज प्रोग्राम बनाम लिनक्स के लिए इसे साफ़ करने के लिए मेरे प्रोग्राम में किसी भी कोड को बदलना पड़े (उदाहरण के लिए यदि इसे दो कार्यों के बीच चुनना है तो निर्णय करना होगा रन-टाइम पर या संकलित समय पर स्वायत्तता से)।मैं सी ++

+0

सांत्वना भी में मानक सी ++ 11 अस्तित्व में नहीं है, इसलिए pedantically अपने प्रश्न भी नहीं है इसका कोई मतलब है। और आपके प्रोग्राम 'foo' को रीडायरेक्ट किया जा रहा है (उदा।' Foo> output.txt') या पाइपलाइन (उदा। 'Foo | grep xxx') के बारे में क्या? बीटीडब्ल्यू, कुछ कंप्यूटरों में कोई कंसोल नहीं है (उदा। अधिकांश वेब सर्वर या वीपीएस) –

उत्तर

28

लघु जवाब: आप नहीं कर सकते।

लंबा उत्तर: एक शाप पुस्तकालय का उपयोग करें (यूनिक्स पर ncurses, pdcurses विंडोज पर)। एनसीआरएसईएस आपके पैकेज मैनेजर के माध्यम से उपलब्ध होना चाहिए, और दोनों ncurses और pdcurses के पास एक ही इंटरफ़ेस है (pdcurses कंसोल से स्वतंत्र रूप से विंडोज़ बना सकते हैं जो कंसोल विंडोज़ की तरह व्यवहार करते हैं)।

सबसे मुश्किल जवाब: #ifdef _WIN32 और इस तरह सामान का प्रयोग अलग ऑपरेटिंग सिस्टम पर अलग ढंग से अपने कोड अधिनियम बनाने के लिए।

2

मुझे पता है कि यह मेरे अपने प्रश्न का उत्तर नहीं दे रहा है लेकिन! यह विंडोज (#include <windows.h>) के लिए काम करता है:

void clrscr() 
{ 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    COORD coord = {0, 0}; 
    DWORD count; 

    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    GetConsoleScreenBufferInfo(hStdOut, &csbi); 

    FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); 

    SetConsoleCursorPosition(hStdOut, coord); 
} 
3

इस तरह आप किसी अन्य मंच पर यह करना है, लेकिन यह विंडोज में काम नहीं करता:

void clrscr() 
{ 
#ifdef _WIN32 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    COORD coord = {0, 0}; 
    DWORD count; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    GetConsoleScreenBufferInfo(hStdOut, &csbi); 
    FillConsoleOutputCharacter(hStdOut, ' ', 
           csbi.dwSize.X * csbi.dwSize.Y, 
           coord, &count); 
    SetConsoleCursorPosition(hStdOut, coord); 
#else 
    cout << "\f"; 
#endif 
} 
+0

यह काफी काम नहीं करता है। \ एफ एक फार्म फ़ीड है; यह स्क्रीन को साफ़ नहीं करता है। – coppro

+0

नहीं, लेकिन यह वर्तमान प्रिंटर पेज को साफ़ करता है :-)। – paxdiablo

49

है:

cout << "\f"; 

शायद आप एक सशर्त संकलन करने की आवश्यकता होगी clear the console on both platforms पर कोई सामान्य आदेश नहीं।

#include <cstdlib> 

void clear_screen() 
{ 
#ifdef WINDOWS 
    std::system("cls"); 
#else 
    // Assume POSIX 
    std::system ("clear"); 
#endif 
} 
+0

ने पाया कि यहां http://www.daniweb.com/forums/thread95284.html – fmsf

+5

यह सबसे संक्षिप्त, सामान्य उद्देश्य वाला उत्तर है जो 99% मामलों में काम करेगा। स्वीकृत उत्तर होना चाहिए। – Kevin

+0

http://www.cplusplus.com/articles/j3wTURfi/ इसके अनुसार, सिस्टम() उपयोग में नहीं होना चाहिए ... –

13

लिनक्स पर कंसोल को साफ़ करना संभव है। बेहतरीन तरीका stdout के लिए निम्नलिखित एस्केप अनुक्रम लिखने के लिए:

write(1,"\E[H\E[2J",7); 

है जो /usr/bin/साफ, करता है किसी अन्य प्रक्रिया बनाने की भूमि के ऊपर के बिना। क्योंकि यह असंभव सीमित कर देता

+7

स्पष्ट है: [एच स्क्रीन [2J मिटा देता है और अधिक जानकारी के लिए इच्छुक होना चाहिए गूगल "एएनएसआई भागने दृश्यों" स्क्रीन किसी के ऊपरी-बाएं के लिए कर्सर ले जाता है। –

+0

यह केवल लिनक्स टर्मिनलों के लिए काम करता है जो एएनएसआई-संगत भागने के अनुक्रमों का समर्थन करते हैं। –

+0

त्रुटि: 'लिखने' के लिए कॉल के लिए कोई मिलान करने वाला फ़ंक्शन लिखें (1, "\ E [एच \ ई [2 जे", 7); // हम यहां एएनएसआई एस्केप दृश्यों का उपयोग करते हैं। ^ ~~~~ और मैंने नामस्थान को शामिल किया और चेक किया। –

4

प्रश्न के रूप में तैनात, बिना जवाब है। "स्क्रीन साफ़ करना" विभिन्न ऑपरेटिंग सिस्टम में एक बहुत ही अलग कार्रवाई है, और यह कैसे करता है ऑपरेटिंग सिस्टम विशिष्ट है। "कंसोल" और "टर्मिनल" वाले प्लेटफार्मों के साथ कई लोकप्रिय प्लेटफार्मों पर इसे कैसे करें, इसकी पूरी व्याख्या के लिए this Frequently Given Answer देखें। आपको in the same place भी सामान्य गलतियों से बचने के लिए कुछ स्पष्टीकरण मिलेगा, जिनमें से कई — हैं! उत्तर के रूप में ऊपर दिए गए —।

-2

नहीं चाहेंगे

for (int i=0;i<1000;i++){cout<<endl;} 

स्पष्ट सभी OSes में स्क्रीन?

10

एक सरल चाल: क्यों सांत्वना समाशोधन के लिए प्रणाली() आदेश का उपयोग के साथ संयोजन में मैक्रो का उपयोग करके ओएस प्रकार की जाँच नहीं? इस तरह, आप पैरामीटर के रूप में उचित कंसोल कमांड के साथ एक प्रणाली आदेश पर अमल करने जा रहे हैं।

#ifdef _WIN32 
#define CLEAR "cls" 
#else //In any other OS 
#define CLEAR "clear" 
#endif 

//And in the point you want to clear the screen: 
//.... 
system(CLEAR); 
//.... 
1

वैसे स्क्रीन को साफ़ करने का एक बहुत ही करीब विकल्प है।आप एक लूप का उपयोग करने का प्रयास कर सकते हैं जो नई लाइनों को दोहराता है। उदाहरण के लिए:

for (i = 0; i < 100000; i++) 
{ 
    printf ("\n\n\n\n\n"); 
} 

के बाद आप इस पाश टर्मिनल तुम वापस जहां शीर्ष, काफी आम भावना के साथ एक अव्यवसायिक दृष्टिकोण पर थे करने के लिए स्क्रॉल करने की अनुमति wan't है। यह सीधे जवाब नहीं देता कि आप क्या पूछ रहे हैं लेकिन यह काम कर सकता है।

+7

500 000 नई लाइनों ... lol –

+1

10³³³³³³³³³³ @leonardo_assumpcao –

+3

मेरी 5.874 किमी के लिए पर्याप्त लगता है विस्तृत मॉनिटर –

-3

यदि आप कंसोल

#include <conio.h> 

int main() 

{ 
    clrscr(); 
} 
+2

< conio.h > नहीं C++ मानक का हिस्सा है, यह केवल TurboC में काम करेंगे ++ –

+0

यह DevC++ पर और साथ – fidelmcscort

+0

काम करता है नहीं है, लेकिन सभी compilers है, बस थोड़ा सा। क्या LINUX पर कोई conio.h है, ओपी क्या परवाह करता है? http://stackoverflow.com/questions/8792317/why-cant-i-find-conio-h-on-linux –

1

लघु जवाब

void cls(void) 
{ 
    system("cls||clear"); 
    return; 
} 

लांग जवाब पर काम कर रहे काम करना चाहिए, कृपया इसे पढ़ें:

system("pause") clarification

1

इस कोड को दोनों Windows और यूनिक्स में कंसोल को साफ करता है (हालांकि यह वास्तव में अलग ढंग से संकलित की गई हैं):

// File: clear_screen.h 
#ifndef _CLEAR_SCREEN_H 
#define _CLEAR_SCREEN_H 
void clearScreen(void); /* Clears the screen */ 
#endif /* _CLEAR_SCREEN_H */ 
// File: clear_screen.c 
#ifdef _WIN32 
#include <windows.h> 
void clearScreen(void) { 
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
    COORD topLeft = {0, 0}; 
    DWORD dwCount, dwSize; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    GetConsoleScreenBufferInfo(hOutput, &csbi); 
    dwSize = csbi.dwSize.X * csbi.dwSize.Y; 
    FillConsoleOutputCharacter(hOutput, 0x20, dwSize, topLeft, &dwCount); 
    FillConsoleOutputAttribute(hOutput, 0x07, dwSize, topLeft, &dwCount); 
    SetConsoleCursorPosition(hStdOut, topLeft); 
} 
#endif /* _WIN32 */ 

#ifdef __unix__ 
#include <stdio.h> 
void clearScreen(void) { 
    printf("\x1B[2J"); 
} 
#endif /* __unix__ */