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(如标签中所示),请查看以下链接: 编

如标题所示。如何在C++中清除控制台?< < /P> < P> <强> >纯C++ >强> < /P> 你不能。C++甚至没有控制台的概念。 该程序可以打印到打印机,直接输出到文件,或者重定向到另一个程序的输入。即使你可以在C++中清除控制台,它也会使这些情况变得更复杂。

参见COMP.L.C++FAQ中的这个条目:

特定于操作系统的

如果清除程序中的控制台仍然有意义,并且您对特定于操作系统的解决方案感兴趣,那么这些解决方案确实存在

对于Windows(如标签中所示),请查看以下链接:

编辑:前面提到的答案使用
系统(“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;
}