C++ c++;getstdhandle()背景色

C++ c++;getstdhandle()背景色,c++,C++,我的代码有问题。这不是编译器错误 我有一个函数,根据一个值,它可以在打印2D数组的单元格时更改颜色。在我的main中,我有一个for循环,我在同一个2D数组上反复打印,上面提到的值在每次循环后都不会改变。然而,在第13次循环之后,背景却变得一团糟。我上传了循环12和14之间执行窗口的图像。以下url用于图像 代码如下 void Planet::draw(){ int p=getHQ()->at(getHQ()->size()-1)->getPosHQX(); int q=ge

我的代码有问题。这不是编译器错误

我有一个函数,根据一个值,它可以在打印2D数组的单元格时更改颜色。在我的main中,我有一个for循环,我在同一个2D数组上反复打印,上面提到的值在每次循环后都不会改变。然而,在第13次循环之后,背景却变得一团糟。我上传了循环12和14之间执行窗口的图像。以下url用于图像

代码如下

void Planet::draw(){
int p=getHQ()->at(getHQ()->size()-1)->getPosHQX();
int q=getHQ()->at(getHQ()->size()-1)->getPosHQY();

HANDLE hConsole;
hConsole= GetStdHandle (STD_OUTPUT_HANDLE);
for (int i=0;i<BOO::getGlobalMapSize();i++){
    for (int j=0;j<BOO::getGlobalMapSize();j++){
        if (((i==p) && (j==q)) || ((i==p+1) && (j==q)) || ((i==p+2) && (j==q)) || ((i==p) && (j==q+1)) || ((i==p) && (j==q+2)) || ((i==p+1) && (j==q+2)) || ((i==p+2) && (j==q+1)) || ((i==p+2) && (j==q+2)) || ((i==p+1) && (j==q+1))){
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);
        }
        else{
            if ((getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()>=0) && (getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()<0.3)){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN);
            }
            else if ((getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()>=0.3) && (getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()<0.6)){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_RED);
            }
            else if ((getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()>=0.6) && (getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()<=1)){
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED);
            }
            else{
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);
            }
        }
        cout<<getPlanet()->at(getPlanet()->size()-1)->Map[i][j];
        cout<<'|';
    }
    cout<<endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);
}
cout<<endl<<endl;
Sleep(500);
}

int main(){
srand(time(NULL));
Planet Zeus;
for (int ii=0;ii<14;ii++){
    Zeus.draw();
}
}
void Planet::draw(){
intp=getHQ()->at(getHQ()->size()-1)->getPosHQX();
intq=getHQ()->at(getHQ()->size()-1)->getPosHQY();
处理hConsole;
hConsole=GetStdHandle(标准输出句柄);
对于(int i=0;igetAccessDanger()>=0)和(getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()at(i*BOO::getGlobalMapSize()+j)->getAccessDanger()>=0.6)&(getZones()->at(i*BOO::getGlobalMapSize()+j)->getAccessDanger)->地图[i][j];

coutre在coutStep之前在调试器中存储text属性,并查看出现问题时逻辑上的区别。是的,它工作了。我按照您所说的恢复了text属性,现在它按预期工作。非常感谢您。