C++ 我怎样才能清除控制台
如标题所示。如何在C++中清除控制台?< < /P> < P> <强> >纯C++ >强> < /P> 你不能。C++甚至没有控制台的概念。 该程序可以打印到打印机,直接输出到文件,或者重定向到另一个程序的输入。即使你可以在C++中清除控制台,它也会使这些情况变得更复杂。C++ 我怎样才能清除控制台,c++,windows,console-application,dev-c++,C++,Windows,Console Application,Dev C++,如标题所示。如何在C++中清除控制台?< < /P> < P> >纯C++ >强> < /P> 你不能。C++甚至没有控制台的概念。 该程序可以打印到打印机,直接输出到文件,或者重定向到另一个程序的输入。即使你可以在C++中清除控制台,它也会使这些情况变得更复杂。 参见COMP.L.C++FAQ中的这个条目: 特定于操作系统的 如果清除程序中的控制台仍然有意义,并且您对特定于操作系统的解决方案感兴趣,那么这些解决方案确实存在 对于Windows(如标签中所示),请查看以下链接: 编
参见COMP.L.C++FAQ中的这个条目:
系统(“cls”)代码>,因为微软说过要这么做。然而,评论中指出:。由于此问题,我已删除指向Microsoft文章的链接
库(有些便携)
ncurses是一个支持控制台操作的库:
- (在Posix系统上运行)
- (有点旧的Windows端口)
对于Windows,通过控制台API:
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);
}
它很高兴地忽略了所有可能的错误,但嘿,这是控制台清除。不像系统(“cls”)
那样更好地处理错误
对于*nixes,通常可以使用ANSI转义码,因此:
void clear() {
// CSI[2J clears screen, CSI[H moves the cursor to top-left corner
std::cout << "\x1B[2J\x1B[H";
}
void clear(){
//CSI[2J清除屏幕,CSI[H将光标移动到左上角
std::cout最简单的方法是多次刷新流(理想情况下比任何可能的控制台都大),1024*1024可能是控制台窗口无法达到的大小
int main(int argc, char *argv)
{
for(int i = 0; i <1024*1024; i++)
std::cout << ' ' << std::endl;
return 0;
}
intmain(intargc,char*argv)
{
对于(int i=0;i要清除屏幕,首先需要包括一个模块:
#include <stdlib.h>
这将清除控制台。整个代码如下所示:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
#包括
#包括
使用名称空间std;
int main()
{
系统(“CLS”);
}
这就是您所需要的!祝您好运:)使用System::Console::Clear()
这将清除(清空)缓冲区使用:clrsc()
#包括
使用名称空间std;
int main()
{
clrsc();
cout/#定义_WIN32_WINNT 0x0500//windows>=2000
#包括
#包括
使用名称空间std;
无效位置(短C、短R)
{
坐标xy;
xy.X=C;
xy.Y=R;
设置控制台位置(
GetStdHandle(标准输出句柄),xy);
}
无效cls()
{
pos(0,0);
对于Windows中的(int j=0;j)
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
HANDLE h;
CHAR_INFO v3;
COORD v4;
SMALL_RECT v5;
CONSOLE_SCREEN_BUFFER_INFO v6;
if ((h = (HANDLE)GetStdHandle(0xFFFFFFF5), (unsigned int)GetConsoleScreenBufferInfo(h, &v6)))
{
v5.Right = v6.dwSize.X;
v5.Bottom = v6.dwSize.Y;
v3.Char.UnicodeChar = 32;
v4.Y = -v6.dwSize.Y;
v3.Attributes = v6.wAttributes;
v4.X = 0;
*(DWORD *)&v5.Left = 0;
ScrollConsoleScreenBufferW(h, &v5, 0, v4, &v3);
v6.dwCursorPosition = { 0 };
HANDLE v1 = GetStdHandle(0xFFFFFFF5);
SetConsoleCursorPosition(v1, v6.dwCursorPosition);
}
#包括
int main(){
标准::系统(“cls”);
返回0;
}
在Linux/Unix中:
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
#包括
int main(){
标准::系统(“清除”);
返回0;
}
编辑:完全重做问题
只需测试它们在哪个系统上,并根据系统发送一个系统命令。虽然这将在编译时设置
#ifdef __WIN32
system("cls");
#else
system("clear"); // most other systems use this
#endif
这是一种全新的方法!使用系统(“cls”)
清除屏幕:
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
#包括
内部主(空)
{
系统(“cls”);
返回0;
}
将多行输出到窗口控制台是无用的。它只会向其中添加空行。
不幸的是,这种方法是特定于windows的,涉及到conio.h(和clrsc()可能不存在,这也不是一个标准头)或WinAPI方法
#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 );
}
#包括
void ClearScreen()
{
处理HST输出;
控制台屏幕缓冲区信息csbi;
德沃德计数;
德沃德细胞计数;
COORD homeCoords={0,0};
hStdOut=GetStdHandle(标准输出句柄);
if(hStdOut==无效的句柄值)返回;
/*获取当前缓冲区中的单元格数*/
如果(!GetConsoleScreenBufferInfo(hStdOut,&csbi))返回;
cellCount=csbi.dwSize.X*csbi.dwSize.Y;
/*用空格填充整个缓冲区*/
如果(!FillConsoleOutputCharacter(
hStdOut,
(TCHAR)",,
细胞计数,
家庭合作社,
&计数
))返回;
/*用当前颜色和属性填充整个缓冲区*/
如果(!FillConsoleOutput属性(
hStdOut,
csbi.WATTERATES,
细胞计数,
家庭合作社,
&计数
))返回;
/*将光标移回原位*/
设置控制台或位置(HST输出、homeCoords);
}
对于POSIX系统,它更简单,您可以使用ncurses或终端函数
#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" ) );
}
#包括
#包括
void ClearScreen()
{
如果(!cur_term)
{
int结果;
setupterm(NULL、标准输出文件号和结果);
如果(结果您可以通过system(“”)使用操作系统的clear console方法;
例如,对于windows,它将是系统(“cls”)
不要为不同的操作系统发布三种不同的代码,只需制定一种方法来获取操作系统正在运行的内容。
可以通过使用#ifdef检测是否存在唯一的系统变量来实现这一点
e、 g
#包括
void cls(){
#如果已定义(_WIN32)//如果windows
系统(“cls”);
#否则
系统(“清除”);//如果其他
#endif//finish
}
just call cls()anywhere这在MAC上很难做到,因为它无法访问可以帮助清除屏幕的windows功能。我的最佳修复方法是循环并添加行,直到终端清除为止,然后运行程序。但是,如果主要且经常使用此功能,则效率和内存友好性都会降低
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
void clearScreen(){
int clear=5;
做{
cout适用于Linux/Unix和其他一些系统,但不适用于10 TH2之前的Windows:
printf("\033c");
将重置终端。以下是一种简单的方法:
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
#包括
使用名称空间std;
int main()
{
cout.flush();//刷新输出流
系统(“清除”);//使用“系统”功能清除控制台
}
对我来说,这是最简单的方法,无需重新发明轮子
void Clear()
{
#如果已定义_WIN32
系统(“cls”);
//CLRSC();//包括头文件:conio.h
#elif defined(uu LINUX_uuu)| defined(u gnu_uulinux_uuuu)| d
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
printf("\033c");
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
HANDLE h;
CHAR_INFO v3;
COORD v4;
SMALL_RECT v5;
CONSOLE_SCREEN_BUFFER_INFO v6;
if ((h = (HANDLE)GetStdHandle(0xFFFFFFF5), (unsigned int)GetConsoleScreenBufferInfo(h, &v6)))
{
v5.Right = v6.dwSize.X;
v5.Bottom = v6.dwSize.Y;
v3.Char.UnicodeChar = 32;
v4.Y = -v6.dwSize.Y;
v3.Attributes = v6.wAttributes;
v4.X = 0;
*(DWORD *)&v5.Left = 0;
ScrollConsoleScreenBufferW(h, &v5, 0, v4, &v3);
v6.dwCursorPosition = { 0 };
HANDLE v1 = GetStdHandle(0xFFFFFFF5);
SetConsoleCursorPosition(v1, v6.dwCursorPosition);
}
#include <bits/stdc++.h>
int main()
{
int arr[] = {10, 5, 8 ,20, 2, 18};
int n = sizeof(arr)/sizeof(arr[0]);
system("cls");
print_array(arr, n);
return 0;
}