Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio是否跳过多个if语句?_C++_Visual Studio_Console Application_Visual Studio 2019 - Fatal编程技术网

C++ Visual Studio是否跳过多个if语句?

C++ Visual Studio是否跳过多个if语句?,c++,visual-studio,console-application,visual-studio-2019,C++,Visual Studio,Console Application,Visual Studio 2019,我正在制作一个简单的迷宫程序,生成一个迷宫。目前我正在制作一个迷宫的唯一解决方案,突然我发现了一些奇怪的东西。调试此代码时,我看到VS只是跳过了我的if语句: for (i = 0; i <= (col * row) / 200; i++) { solution[se[0]][se[1]] = 1; if (lab[se[0] + 1][se[1]]) se[0] + 1; else if (lab[se[0]

我正在制作一个简单的迷宫程序,生成一个迷宫。目前我正在制作一个迷宫的唯一解决方案,突然我发现了一些奇怪的东西。调试此代码时,我看到VS只是跳过了我的if语句:

        for (i = 0; i <= (col * row) / 200; i++)
        {
        solution[se[0]][se[1]] = 1;
        if (lab[se[0] + 1][se[1]]) se[0] + 1;
        else if (lab[se[0]][se[1] + 1]) se[1] + 1;
        else if (lab[se[0] - 1][se[1]]) se[0] - 1;
        else if (lab[se[0]][se[1] - 1]) se[1] - 1;

        solution[se[2]][se[3]] = 1;
        if (lab[se[2] - 1][se[3]]) se[2] - 1;
        else if (lab[se[2]][se[3] - 1]) se[3] - 1;
        else if (lab[se[2] + 1][se[3]]) se[2] + 1;
        else if (lab[se[2]][se[3] + 1]) se[3] + 1;
        }
我希望它不是复制品,但我一点也不知道这里有什么问题,所以它可能是一个

如果有人想复制问题,下面是完整的代码:

#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <string>

CONSOLE_SCREEN_BUFFER_INFO csbi;
int **lab, **solution;
int col, row, i, j;

int main() {
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    col = csbi.srWindow.Right - csbi.srWindow.Left; row = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; i = 0; j = 0;
    lab = new int* [row];
    for (i = 0; i < row; ++i)
        lab[i] = new int[col];
    solution = new int* [row];
    for (i = 0; i < row; ++i)
        solution[i] = new int[col];

    for (i = 0; i < row; i++) {           // Build basic maze
        for (j = 0; j < col; j++) {
            if (i == 0) lab[i][j] = 0;
            else if (i == j == 1) lab[i][j] = 1;
            else if (i == 1 && j == col - 1) lab[i][j] = 1;
            else if (i == row - 1) lab[i][j] = 0;
            else if (j == 0) lab[i][j] = 0;
            else if (j == col - 1) lab[i][j] = 0;
            else {
                if (lab[i - 1][j] == 0) lab[i][j] = rand() % 2;
                else {
                    if (lab[i - 1][j - 1] + lab[i - 1][j + 1] + lab[i - 2][j] <= 1) lab[i][j] = 1;
                    else {
                        lab[i][j] = rand() % 2;
                    }
                }
            }
        }
    }

    int se[4] = { 1,1,1,col - 1 };

    for (i = 0; i <= (col * row) / 200; i++)        // Generate a solution
    {
        solution[se[0]][se[1]] = 1;
        if (lab[se[0] + 1][se[1]]) se[0] + 1;
        else if (lab[se[0]][se[1] + 1]) se[1] + 1;
        else if (lab[se[0] - 1][se[1]]) se[0] - 1;
        else if (lab[se[0]][se[1] - 1]) se[1] - 1;

        solution[se[2]][se[3]] = 1;
        if (lab[se[2] - 1][se[3]]) se[2] - 1;
        else if (lab[se[2]][se[3] - 1]) se[3] - 1;
        else if (lab[se[2] + 1][se[3]]) se[2] + 1;
        else if (lab[se[2]][se[3] + 1]) se[3] + 1;
    }
    while (se[0] != se[2] || se[1] != se[3])
    {
        if (se[0] < se[2])
        {
            if (lab[se[2] - 1][se[3]]) se[2] - 1;
            if (lab[se[0] + 1][se[1]]) se[0] + 1;
        }
        if (se[1] < se[3])
        {
            if (lab[se[2]][se[3] - 1]) se[3] + 1;
            if (lab[se[0]][se[1] + 1]) se[1] + 1;
        }
        solution[se[0]][se[1]] = 1;
        solution[se[2]][se[3]] = 1;
    }


    std::string out;
    for (i = 0; i < row; i++) {            // Print maze
        for (j = 0; j < col; j++) {
            if (solution[i][j]==1) out.append("@");
            else if (!lab[i][j]) out.append("#");
            else out.append(" ");;
        }
        std::cout << out << '\n';
        out="";
    }

    system("pause");

    for (i = 0; i < row; ++i) delete[] lab[i];
    delete[] lab;
}

很抱歉,这段代码乱七八糟,因为它还在进行中


顺便说一句,我使用的是VS2019,还没有在其他编译器中尝试过。这真的是编译器的错误吗?

编译器认为适合“跳过”if块的原因是因为它们中没有任何有任何效果的代码

例如,在声明中:

如果实验室[se[0]+1][se[1]]se[0]+1; 当测试中的条件为真时,会发生什么?语句se[0]+1实际上并没有修改任何内容—它只是一个具有给定值的表达式

您可能希望将1添加到se[0],因此需要:

如果lab[se[0]+1][se[1]]se[0]+=1;
对于其他if和else if行也是如此。注意添加的=字符

编译器认为适合“跳过”if块的原因是因为它们中没有任何有效的代码

例如,在声明中:

如果实验室[se[0]+1][se[1]]se[0]+1; 当测试中的条件为真时,会发生什么?语句se[0]+1实际上并没有修改任何内容—它只是一个具有给定值的表达式

您可能希望将1添加到se[0],因此需要:

如果lab[se[0]+1][se[1]]se[0]+=1;
对于其他if和else if行也是如此。注意添加的=字符

这段代码乱七八糟,因为它还在进行中。。。只是一个友好的建议:从头做起。这使得迭代开发变得非常容易。这段代码很混乱,因为它仍在进行中。。。只是一个友好的建议:从头做起。它使迭代开发变得更加容易。。