c ++在10&000; 000行之后的错误背景颜色

时间:2017-05-06 17:44:00

标签: c++ windows colors background console

打印的线条数超过"屏幕尺寸" (默认为300,最大为9999)第一条白线的其余部分为黄色背景。信息会连续显示,重要部分会突出显示,因此system("cls")不是首选选项。还有其他解决方案吗? Windows 7,MSVS社区2017,x86& 64

#include "Windows.h"
#include "stdio.h"

class Console {
    HANDLE h;
public:
    Console() { h = GetStdHandle(STD_OUTPUT_HANDLE); }
    void ChangeColor(WORD wColor) {
        if (h != INVALID_HANDLE_VALUE) SetConsoleTextAttribute(h, wColor);
    }
} console;

int main() {
    for (int i = 0;; i += 4) {
        console.ChangeColor(224);
        printf("highligted yellow, line = %5d\n", i);

        console.ChangeColor(240);
        printf("plane white\n\n\n");

        if (i %  1000 == 0) getchar();
    }
}

1 个答案:

答案 0 :(得分:0)

我认为控制台缓冲区会被重复使用,而你设置的颜色属性会混淆新行。您应该分配黑色并单独处理EOL。

for (int i = 0;; i += 4)
{
    console.ChangeColor(224);
    printf("highligted yellow, line = %d", i);
    console.ChangeColor(0);
    printf("\n");
    console.ChangeColor(240);
    printf("plane white");
    console.ChangeColor(0);
    printf("\n\n\n");
    if (0 == (i %  1000)) getchar();
}