আমি কীভাবে কনসোল সাফ করতে পারি?


93

যেমন শিরোনামে। আমি সি ++ এ কীভাবে কনসোল সাফ করতে পারি?


কোন ওএসে? এটি লিনাক্স বনাম উইন্ডোজে কিছুটা আলাদা, কেবল একটি উদাহরণের জন্য। যদি আপনি এটি উইন্ডোজের জন্য চান তবে দেখুন: stackoverflow.com/questions/5866529/…
জেরি কফিন

আপনি কি একগুচ্ছ রেখা মুদ্রণ করার চেষ্টা করছেন এবং তারপরে এটি পরিষ্কার করুন, বা প্রতিটি লাইনের পরে সাফ করবেন?
জেএম

4
আমি মাঝে মাঝে কনসোল ভিউ পুনরায় সেট করতে চাই। আমি মিলিয়ন নতুন লাইনের সাথে স্প্যাম কনসোল করতে চাই না।
থমাস বি

আমি কনসোল উইন্ডো হ্যান্ডেল ব্যবহার করে সিটিতে এটি কীভাবে করব তা জিজ্ঞাসা করেছি । এই আমি উত্তর পেয়েছি। আশা করি, এটি আপনার ক্ষেত্রে সহায়তা করে।
আগি হামারথিফ

উত্তর:


72

খাঁটি সি ++ এর জন্য

আপনি পারবেন না। সি ++ এর কনসোলের ধারণাও নেই।

প্রোগ্রামটি কোনও মুদ্রকটিতে মুদ্রণ হতে পারে, সরাসরি কোনও ফাইলে আউটপুট আদান প্রদান করতে পারে বা এটি যে সমস্ত যত্নশীল তা অন্য প্রোগ্রামের ইনপুটটিতে পুনঃনির্দেশিত করা যেতে পারে। এমনকি আপনি যদি সি ++ তে কনসোল সাফ করতে পারেন তবে তা এই ক্ষেত্রেগুলিকে উল্লেখযোগ্যভাবে মেসেঞ্জার করে তুলবে।

এই এন্ট্রিটি কমম্পাং।

ওএস-নির্দিষ্ট

যদি আপনার প্রোগ্রামটিতে কনসোলটি সাফ করা এখনও বুদ্ধিমান হয়ে থাকে এবং আপনি অপারেটিং সিস্টেমের নির্দিষ্ট সমাধানগুলিতে আগ্রহী হন তবে সেগুলি বিদ্যমান those

উইন্ডোজ জন্য (আপনার ট্যাগ হিসাবে), এই লিঙ্কটি দেখুন:

সম্পাদনা: এই উত্তরটি আগে ব্যবহার করে উল্লিখিত ছিল system("cls");, কারণ মাইক্রোসফ্ট এটি করতে বলেছিল। তবে এটি মন্তব্যে ইঙ্গিত করা হয়েছে যে এটি করা নিরাপদ জিনিস নয় । এই সমস্যার কারণে আমি মাইক্রোসফ্ট নিবন্ধের লিঙ্কটি সরিয়েছি।

গ্রন্থাগারগুলি (কিছুটা বহনযোগ্য)

ncurses একটি লাইব্রেরি যা কনসোল ম্যানিপুলেশন সমর্থন করে:


6
@ অ্যালফ: আমি এমএস নিবন্ধ থেকে আটকানো অনুলিপি করেছি, তাই তাদের ডাউনভোট করুন, আমাকে নয়;) যদিও আমি এটি ঠিক করব।
মের্লিন মরগান-গ্রাহাম

11
উত্স কোনও বিষয় নয় - এমন কোড যা এমনকি সংকলন করবে না (জি ++ সহ) হ'ল উনগুড। তবে আপনি যেহেতু এটি ঠিক করেছেন আমি ডাউনভোটটি সরিয়েছি। :-)
চিয়ার্স এবং এইচটিএইচ। - আলফ

4
@ ইউশাআলেয়উব এমএস লিঙ্কটি ব্যবহারের পরামর্শ দেওয়ার জন্য সরিয়ে উত্তরটি সম্পাদনা করেছেন systemএবং কেন আপনার কারণটি ব্যাখ্যা করে আপনার নিবন্ধে একটি লিঙ্ক যুক্ত করেছেন।
মের্লিন মরগান-গ্রাহাম

53

কনসোল এপিআই এর মাধ্যমে উইন্ডোজের জন্য:

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);
}

এটি আনন্দের সাথে সমস্ত সম্ভাব্য ত্রুটি উপেক্ষা করে, কিন্তু ওহে, এটি কনসোল ক্লিয়ারিং। NOT LIKE system("cls")হ্যান্ডলগুলি ত্রুটি কোনো ভালো।

* নিক্সের জন্য, আপনি সাধারণত এএনএসআই এস্কেপ কোডগুলির সাথে যেতে পারেন, সুতরাং এটি হ'ল:

void clear() {
    // CSI[2J clears screen, CSI[H moves the cursor to top-left corner
    std::cout << "\x1B[2J\x1B[H";
}

এর systemজন্য ব্যবহার করা কেবল কুরুচিপূর্ণ।


6
"এর জন্য সিস্টেম ব্যবহার করা কেবল কুৎসিত" " - কেন? অবশ্যই আমাকে পরিষ্কার দেখাচ্ছে :)
মার্লিন মরগান-গ্রাহাম

17
@ মের্লিনমর্গান-গ্রাহাম: এটি একটি ফ্রিগিন 'কনসোল সাফ করার জন্য একটি শেল প্রক্রিয়া তৈরি করে। কোন উপায়ে এটি একটি পরিষ্কার সমাধান? : পি এটি stdout লেখার পরিবর্তে echoমাধ্যমে ব্যবহার করার মত system()
বিড়াল প্লাস প্লাস

4
ওয়ান লাইনারের এফটিডাব্লু! ;) হ্যাঁ, আমি সুন্দরী হয়ে উঠছি এটি একটি শেল প্রক্রিয়া তৈরি করেছে তা আপনার উত্তরের জন্য ভাল তথ্য। * নিক্স সংস্করণের জন্য +1
মের্লিন মরগান-গ্রাহাম

8
ব্যবহার system()করা একটি সাধারণ ভুল। সুতরাং, এছাড়াও, ইউনিসের জন্য আপনার প্রস্তাবিত পদ্ধতি। পসিক্স সিস্টেমে এটি করা উচিত। আপনি উইন 32 অংশটি ঠিকঠাক পেয়েছেন, যদিও আপনি "স্ক্রোল ব্যাক" কনভেনশনটি অন্তর্ভুক্ত করেননি।
JdeBP

4
সংরক্ষণাগারগুলির প্রয়োজন নেই। jdebp.eu./FGA/cleering-Te-tui-screen.html#CLS বিদ্যমান।
জেডিবিপি

20

লিনাক্স / ইউনিক্স এবং সম্ভবত কিছু অন্যদের জন্য তবে উইন্ডোজের জন্য 10 টিএইচ 2 এর আগে নয়:

printf("\033c");

টার্মিনাল পুনরায় সেট করা হবে।


15

চাকা পুনরায় উদ্ভাবন না করে আমার পক্ষে সবচেয়ে সহজ উপায়।

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.
secavfr

8

উইন্ডো কনসোলে একাধিক লাইন আউটপুট আউট করা অকার্যকর .. এটি খালি লাইন যুক্ত করে। দুঃখজনকভাবে, উপায়টি উইন্ডোজ নির্দিষ্ট এবং এর মধ্যে কোনওভাবে conio.h (এবং clrscr () উপস্থিত নাও থাকতে পারে, এটি কোনও মানক শিরোনাম নয়) বা উইন এপিআই পদ্ধতি

#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 );
  }

পসিক্স সিস্টেমের জন্য এটি সহজতর, আপনি এনক্রেস বা টার্মিনাল ফাংশন ব্যবহার করতে পারেন

#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" ) );
  }

5
// #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;
}

3

স্ক্রিনটি সাফ করার জন্য আপনাকে প্রথমে একটি মডিউল অন্তর্ভুক্ত করতে হবে:

#include <stdlib.h>

এটি উইন্ডোজ কমান্ডগুলি আমদানি করবে। তারপরে আপনি ব্যাচ কমান্ডগুলি চালনার জন্য 'সিস্টেম' ফাংশনটি ব্যবহার করতে পারেন (যা কনসোলটি সম্পাদনা করে)। উইন্ডোজ সি ++ এ, স্ক্রিনটি সাফ করার কমান্ডটি হ'ল:

system("CLS");

এবং এটি কনসোলটি সাফ করবে। পুরো কোডটি দেখতে এই রকম হবে:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
system("CLS");
}

এবং এটাই আপনার দরকার! গুডলাক :)


4
সিস্টেম ("cls") এই ইস্যুটির বহনযোগ্য সমাধান নয়, তবে এটি উইন্ডোজ সিস্টেমে কাজ করে।
সিএমএস_95

4
এটি কোনও "মডিউল" নয়। সি ++ এর "মডিউল" নেই। তদুপরি, stdlib.hসি স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট করা হয়েছে এবং উইন্ডোজ নিজেই উইন্ডোজ আমদানি করে "উইন্ডোজ কমান্ড আমদানি" এর সাথে কিছুই করার নেই। এই নিটপিকিং বাদে আপনি ভাল আছেন।
অরবিট

3

উইন্ডোজে:

#include <cstdlib>

int main() { 
    std::system("cls");
    return 0;
}

লিনাক্স / ইউনিক্সে:

#include <cstdlib>

int main() { 
    std::system("clear");
    return 0;
}

3

ম্যাক দেখার পক্ষে এটি করা শক্ত কারণ এর উইন্ডো ফাংশনগুলিতে অ্যাক্সেস নেই যা স্ক্রিনটি সাফ করতে সহায়তা করে। আমার সেরা ফিক্সটি টার্মিনালটি পরিষ্কার না হওয়া অবধি লুপ এবং লাইন যুক্ত করা এবং তারপরে প্রোগ্রামটি চালানো। তবে আপনি এটি প্রাথমিক এবং প্রায়শই ব্যবহার করেন তবে এটি দক্ষ বা মেমরির পক্ষে উপযুক্ত নয়।

void clearScreen(){
    int clear = 5;
    do {
        cout << endl;
        clear -= 1;
    } while (clear !=0);
}

2

system("cls")পর্দা সাফ করতে ব্যবহার করুন:

#include <stdlib.h>

int main(void)
{
    system("cls");
    return 0;
}

4
ইতিমধ্যে গৃহীত উত্তরে উল্লেখ করা হয়েছে। এখানে কোন নতুন তথ্য।
ডায়ালেক্টিকাস

তারপরে কাউট / ডাব্লুসিআউট থেকে মুক্তি পান এবং কেবল সিস্টেমে পাইপ স্টাফ ("প্রতিধ্বনি" + আপনার আউটপুট);
তানভীর বদর

2

উইন্ডোজে আমাদের একাধিক বিকল্প রয়েছে:

  1. clrscr () (শিরোনাম ফাইল: conio.h)

  2. সিস্টেম ("cls") (শিরোনাম ফাইল: stdlib.h)

লিনাক্সে, সিস্টেমটি ব্যবহার করুন ("পরিষ্কার") (শিরোনাম ফাইল: stdlib.h)


নোট করুন যে সিস্টেমে কোনও কল () কোনও সুরক্ষা সমস্যা হতে পারে।
জন ডো

0

এটি করার সহজ উপায় এখানে:

#include <iostream>

using namespace std;

int main()
{
    cout.flush(); // Flush the output stream
    system("clear"); // Clear the console with the "system" function
}

-1

সিস্টেম :: কনসোল :: ক্লিয়ার () ব্যবহার করুন;

এটি বাফারটি (খালি) সাফ করবে


4
[ত্রুটি] 'সিস্টেম' ঘোষণা করা হয়নি।
লাভটোকোড

6
এটি সি ++ / সিএলআই (ওরফে। নেট সি ++) এর জন্য
ফ্রাইগুই

-1
#include <cstdlib>

void cls(){
#if defined(_WIN32) //if windows
    system("cls");

#else
    system("clear");    //if other
#endif  //finish

}

স্রেফ কল কল () কোথাও


ওপি এটি সন্ধান করছে না। প্রশ্ন যুক্ত মন্তব্য পড়ুন।
আগি হামারথিফ

-2

আপনি সিস্টেমের মাধ্যমে অপারেটিং সিস্টেমের স্পষ্ট কনসোল পদ্ধতি ব্যবহার করতে পারেন ("");
উইন্ডোজের জন্য এটি সিস্টেম ("ক্লস") হবে; উদাহরণস্বরূপ
এবং বিভিন্ন অপারেটিং সিস্টেমের জন্য তিনটি পৃথক কোড প্রকাশের পরিবর্তে। ওএস কী চলছে তা পেতে কেবল একটি পদ্ধতি তৈরি করুন।
আপনি সনাক্ত করতে পারেন যদি অনন্য ব্যবস্থা ভেরিয়েবল #ifdef সঙ্গে বিদ্যমান
উদাঃ

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

}

-2

সম্পাদনা: সম্পূর্ণ পুনরায় প্রশ্ন red

তারা কোন সিস্টেমে রয়েছে তা কেবল পরীক্ষা করে দেখুন এবং সিস্টেমের উপর নির্ভর করে একটি সিস্টেম কমান্ড প্রেরণ করুন। যদিও এটি সংকলন সময়ে সেট করা হবে

#ifdef __WIN32
    system("cls");
#else
    system("clear"); // most other systems use this
#endif

এটি সম্পূর্ণ নতুন পদ্ধতি!


4
এটি করার একটি খুব খারাপ উপায়। এছাড়াও এটি কনসোল সাফ করছে না, এটি কেবল ফাঁকা রেখা যুক্ত করছে। সাহায্য করতে যাচ্ছে না।
বিষ্ণু নারং

চোটে অপমান যোগ করার জন্য, coutকোনও ফাইলে পুনর্নির্দেশ করা হতে পারে। তারপরে কোনও কনসোলের কোনও ধারণা নেই।
তানভীর বদর

-3

ব্যবহার: clrscr ();

#include <iostream>
using namespace std;
int main()
      {           
         clrscr();
         cout << "Hello World!" << endl;
         return 0;
      }

4
"এটি পুরানো বোরল্যান্ড সি সংকলকগুলিতে <conio.h> তে একটি ফাংশন ছিল। এটি কোনও সি ++ স্ট্যান্ডার্ড ফাংশন নয়" " stackoverflow.com/a/930141/1058115
cojack

-7

সবচেয়ে সহজ উপায় হ'ল একাধিকবার স্ট্রিম ফ্লাশ করা (আদর্শভাবে বড় তখন কোনও সম্ভাব্য কনসোল) 1024 * 1024 সম্ভবত কোনও আকার যা কোনও কনসোল উইন্ডো হতে পারে না।

int main(int argc, char *argv)
{
  for(int i = 0; i <1024*1024; i++)
      std::cout << ' ' << std::endl;

  return 0;
}

এটির সাথে একমাত্র সমস্যা হ'ল সফটওয়্যার কার্সার; প্ল্যাটফর্ম / কনসোলের উপর নির্ভর করে যে জ্বলজ্বল জিনিস (বা জ্বলজ্বল নয়) এর শীর্ষে থাকা কনসোলের শেষে থাকবে। তবে এটি কখনও আশা করে কোনও ঝামেলা পোষণ করবে না।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.