如何清空控制台

126

如标题所述。如何在C++中清除控制台?


1
在哪个操作系统上?例如,在Linux和Windows上有很大的不同。如果你想在Windows上使用,请参考:https://dev59.com/uFbUa4cB1Zd3GeqPB8pn#5866648 - Jerry Coffin
你是想打印一堆行然后清除它,还是每行打印完就清除? - jpm
1
有时我想重置控制台视图。我不想用无数的换行符刷屏控制台。 - Thomas B
我在 C 语言中使用控制台窗口句柄询问“如何在不使用 system 的情况下清除 Win32 控制台窗口”。我收到的答案是这个。希望它能对你有所帮助。 - Agi Hammerthief
20个回答

2

在Windows中,我们有多个选项:

  1. clrscr()(头文件:conio.h)

  2. system("cls")(头文件:stdlib.h)

在Linux中,使用system("clear")(头文件:stdlib.h)

注:以上函数均用于清除控制台屏幕。


请注意,任何对system()的调用都可能存在安全问题。 - John Doe

1

效果非常好:

#include <windows.h>

void clearscreen()
{
    HANDLE hOut;
    COORD Position;

    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    Position.X = 0;
    Position.Y = 0;
    SetConsoleCursorPosition(hOut, Position);
}

1

If you're on Windows:

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

这就是 system("cls") 的作用,无需创建进程即可实现清屏。

1

我正在使用 Windows 10 终端。

std::system("cls"); // cls or clear

0

这里有一个简单的方法:

#include <iostream>

using namespace std;

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

0
我不认为使用系统命令(`system("");`)来完成这些特定任务是一个好的做法,所以我写了一个在C/C++中清除控制台屏幕的函数,它几乎具有与`system("cls");`相同的功能,但不需要调用系统命令。(适用于Windows)你可以将这个函数复制到你的C/C++代码中,这样你就可以使用这个函数来清除控制台屏幕,但请确保你的代码中包含了Windows.h库。以下是代码:
void clrscr() {
    DWORD Unused = 0;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    COORD zerozeroc = {0, 0};
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    DWORD Length = csbi.dwSize.X * csbi.dwSize.Y;
    FillConsoleOutputCharacterW(GetStdHandle(STD_OUTPUT_HANDLE), ' ', Length, zerozeroc, &Unused);
    FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), csbi.wAttributes, Length, zerozeroc, &Unused);
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), zerozeroc);
}

你好!请编辑以解释这个解决方案如何以不同或更好的方式解决问题,而不是第二票数最多的答案,因为它几乎是一个相同的功能。 - Edward

-1

使用 System::Console::Clear();

这将清除(清空)缓冲区


3
【错误】'System' 未被声明。 - LoveToCode
6
这是针对c++/CLI(又称.NET c++)的。 - FryGuy

-1
#include <cstdlib>

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

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

}

随时调用cls()


这不是OP正在寻找的内容。请阅读添加到问题中的评论。 - Agi Hammerthief

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

3
这个函数曾经是在旧版的Borland C编译器中的<conio.h>头文件里的,但并不是C++标准函数。 - cojack

-8
最简单的方法是多次刷新流(理想情况下大于任何可能的控制台),1024 * 1024 可能是一个控制台窗口永远不可能达到的大小。
int main(int argc, char *argv)
{
  for(int i = 0; i <1024*1024; i++)
      std::cout << ' ' << std::endl;

  return 0;
}

唯一的问题是软件光标;那个闪烁的东西(或者不闪烁的东西),取决于平台/控制台,将位于控制台的末尾,而不是顶部。然而,这应该不会引起任何麻烦。

2
这个答案是一个常见的错误 - JdeBP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接