gpt4 book ai didi

C++整行在不应该的时候被着色

转载 作者:行者123 更新时间:2023-11-28 05:54:18 25 4
gpt4 key购买 nike

我正在使用 Windows。我设法将问题简化为这个。

#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
int main()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),23);
for (int i=0;i<400;++i)
{
cout<<i<<'\n';
}
cout.flush();
getch();
return 0;
}

它应该只为文本和整行着色,但在第 300 行之后,整行都被着色,而不仅仅是文本。使用 '\n' 和 endl 之间似乎没有任何区别。同样,文本是什么或者我是否多次更改颜色都没有关系,只是行数。我也尝试过使用 printf,它也没有什么不同。

这是截图:

image

知道它为什么会这样以及我该如何解决它吗?

最佳答案

问题是您的循环输出的数据多于控制台的屏幕缓冲区可以容纳的数据。初始缓冲区包含 300 行。当您的循环输出超过初始缓冲区的末尾时,旧内容将被丢弃,显然新内容现在已经继承了丢弃开始前最后一个输出的特征。未写入的缓冲区单元格的颜色最初是黑色,但一旦缓冲区开始滚动就变成蓝色。

您可以使用 GetConsoleScreenBufferInfo() 检索初始缓冲区大小,然后使用 SetConsoleScreenBufferSize() 增加缓冲区中的行数。如果您将行数设置为 401+,您将不会再看到蓝色填充整行(假设当您的应用程序开始运行时屏幕上还没有显示任何内容)。

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO info = {0};
GetConsoleScreenBufferInfo(hConsole, &info);
info.dwSize.Y = 401;
SetConsoleScreenBufferSize(hConsole, info.dwSize);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_BLUE);

for (int i=0;i<400;++i)
{
cout<<i<<'\n';
}
cout.flush();

image

关于C++整行在不应该的时候被着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com