当我使用CHAR_INFO结构时,控制台无明显原因改变颜色

问题描述 投票:0回答:1

我一般来说对C ++和计算机编程还是很陌生,我正在尝试在大学项目的控制台上制作赛车游戏。我目前正在尝试了解如何使用windows.h和屏幕缓冲区,并且正在关注在线教程。到目前为止,这是我的代码:

#include <iostream>
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
#include <ctime>
#define WIDTH 80
#define FIELD_W 70
#define HEIGHT 35
using namespace std;

HANDLE whdl;
HANDLE rhdl;
int main() {
    srand(time(0));

    SMALL_RECT window_size = { 0, 0, WIDTH-1, HEIGHT-1 };

    whdl = GetStdHandle(STD_OUTPUT_HANDLE);
    rhdl = GetStdHandle(STD_INPUT_HANDLE);

    SetConsoleTitle(L"---RAGE RACER---");

    SetConsoleWindowInfo(whdl, TRUE, &window_size);
    COORD buffer_size = { WIDTH, HEIGHT };
    SetConsoleScreenBufferSize(whdl, buffer_size);

    COORD CharacterBufferSize = { WIDTH, HEIGHT };
    COORD CharacterPosition = { 0, 0 };
    SMALL_RECT console_write_area = { 0, 0, WIDTH-1, HEIGHT-1 };
    CHAR_INFO buffer[WIDTH * HEIGHT];

    for (int y = 0; y < HEIGHT; ++y) {
            buffer[WIDTH * y + 1].Char.AsciiChar = (unsigned char)99;
            for (int x = 1; x < FIELD_W; ++x) {
                buffer[x].Char.AsciiChar = ' ';
            }
            buffer[WIDTH * y].Char.AsciiChar = (unsigned char)99;
        }

        WriteConsoleOutput(whdl, buffer, CharacterBufferSize, CharacterPosition, &console_write_area);

        getchar();
    return 0;
}


我知道for循环已关闭,问题在于,每当我运行代码时,控制台都被红色空格覆盖,如果我尝试运行另一个程序,它将正常工作,如果按动键,它们将被写成黑底白字一如既往。我正在使用Visual Studio2019。在此先感谢您,对于我可能没有意识到而写的s亵内容表示抱歉。

c++ windows colors console background-color
1个回答
0
投票

buffer最初未初始化,包含随机垃圾。您初始化其元素的Char成员,但不初始化Attributes成员,该成员在调用WriteConsoleOutput时仍是随机垃圾。 Attributes是决定字符颜色的原因。

通常,您的程序通过访问未初始化的对象而表现出未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.