যেমন শিরোনামে। আমি সি ++ এ কীভাবে কনসোল সাফ করতে পারি?
যেমন শিরোনামে। আমি সি ++ এ কীভাবে কনসোল সাফ করতে পারি?
উত্তর:
খাঁটি সি ++ এর জন্য
আপনি পারবেন না। সি ++ এর কনসোলের ধারণাও নেই।
প্রোগ্রামটি কোনও মুদ্রকটিতে মুদ্রণ হতে পারে, সরাসরি কোনও ফাইলে আউটপুট আদান প্রদান করতে পারে বা এটি যে সমস্ত যত্নশীল তা অন্য প্রোগ্রামের ইনপুটটিতে পুনঃনির্দেশিত করা যেতে পারে। এমনকি আপনি যদি সি ++ তে কনসোল সাফ করতে পারেন তবে তা এই ক্ষেত্রেগুলিকে উল্লেখযোগ্যভাবে মেসেঞ্জার করে তুলবে।
এই এন্ট্রিটি কমম্পাং।
ওএস-নির্দিষ্ট
যদি আপনার প্রোগ্রামটিতে কনসোলটি সাফ করা এখনও বুদ্ধিমান হয়ে থাকে এবং আপনি অপারেটিং সিস্টেমের নির্দিষ্ট সমাধানগুলিতে আগ্রহী হন তবে সেগুলি বিদ্যমান those
উইন্ডোজ জন্য (আপনার ট্যাগ হিসাবে), এই লিঙ্কটি দেখুন:
সম্পাদনা: এই উত্তরটি আগে ব্যবহার করে উল্লিখিত ছিল system("cls");
, কারণ মাইক্রোসফ্ট এটি করতে বলেছিল। তবে এটি মন্তব্যে ইঙ্গিত করা হয়েছে যে এটি করা নিরাপদ জিনিস নয় । এই সমস্যার কারণে আমি মাইক্রোসফ্ট নিবন্ধের লিঙ্কটি সরিয়েছি।
গ্রন্থাগারগুলি (কিছুটা বহনযোগ্য)
ncurses একটি লাইব্রেরি যা কনসোল ম্যানিপুলেশন সমর্থন করে:
system
এবং কেন আপনার কারণটি ব্যাখ্যা করে আপনার নিবন্ধে একটি লিঙ্ক যুক্ত করেছেন।
কনসোল এপিআই এর মাধ্যমে উইন্ডোজের জন্য:
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
জন্য ব্যবহার করা কেবল কুরুচিপূর্ণ।
echo
মাধ্যমে ব্যবহার করার মত system()
।
system()
করা একটি সাধারণ ভুল। সুতরাং, এছাড়াও, ইউনিসের জন্য আপনার প্রস্তাবিত পদ্ধতি। পসিক্স সিস্টেমে এটি করা উচিত। আপনি উইন 32 অংশটি ঠিকঠাক পেয়েছেন, যদিও আপনি "স্ক্রোল ব্যাক" কনভেনশনটি অন্তর্ভুক্ত করেননি।
লিনাক্স / ইউনিক্স এবং সম্ভবত কিছু অন্যদের জন্য তবে উইন্ডোজের জন্য 10 টিএইচ 2 এর আগে নয়:
printf("\033c");
টার্মিনাল পুনরায় সেট করা হবে।
চাকা পুনরায় উদ্ভাবন না করে আমার পক্ষে সবচেয়ে সহজ উপায়।
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.
উইন্ডো কনসোলে একাধিক লাইন আউটপুট আউট করা অকার্যকর .. এটি খালি লাইন যুক্ত করে। দুঃখজনকভাবে, উপায়টি উইন্ডোজ নির্দিষ্ট এবং এর মধ্যে কোনওভাবে 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" ) );
}
// #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;
}
স্ক্রিনটি সাফ করার জন্য আপনাকে প্রথমে একটি মডিউল অন্তর্ভুক্ত করতে হবে:
#include <stdlib.h>
এটি উইন্ডোজ কমান্ডগুলি আমদানি করবে। তারপরে আপনি ব্যাচ কমান্ডগুলি চালনার জন্য 'সিস্টেম' ফাংশনটি ব্যবহার করতে পারেন (যা কনসোলটি সম্পাদনা করে)। উইন্ডোজ সি ++ এ, স্ক্রিনটি সাফ করার কমান্ডটি হ'ল:
system("CLS");
এবং এটি কনসোলটি সাফ করবে। পুরো কোডটি দেখতে এই রকম হবে:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
এবং এটাই আপনার দরকার! গুডলাক :)
stdlib.h
সি স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট করা হয়েছে এবং উইন্ডোজ নিজেই উইন্ডোজ আমদানি করে "উইন্ডোজ কমান্ড আমদানি" এর সাথে কিছুই করার নেই। এই নিটপিকিং বাদে আপনি ভাল আছেন।
ম্যাক দেখার পক্ষে এটি করা শক্ত কারণ এর উইন্ডো ফাংশনগুলিতে অ্যাক্সেস নেই যা স্ক্রিনটি সাফ করতে সহায়তা করে। আমার সেরা ফিক্সটি টার্মিনালটি পরিষ্কার না হওয়া অবধি লুপ এবং লাইন যুক্ত করা এবং তারপরে প্রোগ্রামটি চালানো। তবে আপনি এটি প্রাথমিক এবং প্রায়শই ব্যবহার করেন তবে এটি দক্ষ বা মেমরির পক্ষে উপযুক্ত নয়।
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
system("cls")
পর্দা সাফ করতে ব্যবহার করুন:
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
উইন্ডোজে আমাদের একাধিক বিকল্প রয়েছে:
clrscr () (শিরোনাম ফাইল: conio.h)
সিস্টেম ("cls") (শিরোনাম ফাইল: stdlib.h)
লিনাক্সে, সিস্টেমটি ব্যবহার করুন ("পরিষ্কার") (শিরোনাম ফাইল: stdlib.h)
এটি করার সহজ উপায় এখানে:
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
}
স্রেফ কল কল () কোথাও
আপনি সিস্টেমের মাধ্যমে অপারেটিং সিস্টেমের স্পষ্ট কনসোল পদ্ধতি ব্যবহার করতে পারেন ("");
উইন্ডোজের জন্য এটি সিস্টেম ("ক্লস") হবে; উদাহরণস্বরূপ
এবং বিভিন্ন অপারেটিং সিস্টেমের জন্য তিনটি পৃথক কোড প্রকাশের পরিবর্তে। ওএস কী চলছে তা পেতে কেবল একটি পদ্ধতি তৈরি করুন।
আপনি সনাক্ত করতে পারেন যদি অনন্য ব্যবস্থা ভেরিয়েবল #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
}
সম্পাদনা: সম্পূর্ণ পুনরায় প্রশ্ন red
তারা কোন সিস্টেমে রয়েছে তা কেবল পরীক্ষা করে দেখুন এবং সিস্টেমের উপর নির্ভর করে একটি সিস্টেম কমান্ড প্রেরণ করুন। যদিও এটি সংকলন সময়ে সেট করা হবে
#ifdef __WIN32
system("cls");
#else
system("clear"); // most other systems use this
#endif
এটি সম্পূর্ণ নতুন পদ্ধতি!
cout
কোনও ফাইলে পুনর্নির্দেশ করা হতে পারে। তারপরে কোনও কনসোলের কোনও ধারণা নেই।
ব্যবহার: clrscr ();
#include <iostream>
using namespace std;
int main()
{
clrscr();
cout << "Hello World!" << endl;
return 0;
}
সবচেয়ে সহজ উপায় হ'ল একাধিকবার স্ট্রিম ফ্লাশ করা (আদর্শভাবে বড় তখন কোনও সম্ভাব্য কনসোল) 1024 * 1024 সম্ভবত কোনও আকার যা কোনও কনসোল উইন্ডো হতে পারে না।
int main(int argc, char *argv)
{
for(int i = 0; i <1024*1024; i++)
std::cout << ' ' << std::endl;
return 0;
}
এটির সাথে একমাত্র সমস্যা হ'ল সফটওয়্যার কার্সার; প্ল্যাটফর্ম / কনসোলের উপর নির্ভর করে যে জ্বলজ্বল জিনিস (বা জ্বলজ্বল নয়) এর শীর্ষে থাকা কনসোলের শেষে থাকবে। তবে এটি কখনও আশা করে কোনও ঝামেলা পোষণ করবে না।