为什么这种代码顺序不能正常工作?

Why doesn't this order of code work properly?

本文关键字:工作 常工作 代码 顺序 不能 为什么      更新时间:2023-10-16

我已经连续几个小时在做这个程序的一部分。我有几行代码已经困扰了我一个多小时了。这根本说不通。我一遍又一遍地读着台词,在脑子里想它应该怎么做,但它就是不做!这可能是我一直忽视的一些愚蠢的错误(通常发生在我身上…),也可能是由于睡眠不足/过去几个小时一直在做这件事。

程序很长,但我遇到问题的代码块只有几行-所以我只在需要时发布整个程序。


好的,这里是一个快速运行的应该做的事情:

我有一个单一的向量,填充了手动设置的字符串(19个,每个字符串长79个字符)。这个一维向量将被视为二维向量——因为我试图保持它的基本性质。这个字符串向量,如果每行显示1个字符串,本质上创建了一个矩形网格。'和连接矩形部分的'#'路径。它应该得到一个x和y坐标,传递给函数。它像一个二维矢量一样循环并找到位置。它检查该位置的字符是否为NOT '。'或'#',否则它将字符更改为X以标记其位置。我设置了一个有效的x,y坐标,这是a '的位置。' -问题就在i cout ' match found::: '当程序运行时,它显示vLevel[i][j] = '的值。'但由于某种原因,它没有转到else语句那里函数被调用了4次,我输入了cout语句。这是网格的样子。白色的空间就是空间。每一行都是vector中的一个字符串:

.......                                                                    
.......  .......                                                           
.......##.......      ..........................                           
.......  .......      ..........................                           
         .......      ..........................     ..........            
         .......      ..........................#####..........            
                      ..........................     ..........            
                      ..........................           #               
                      ..........................           #               
                       #                                   #               
                       #                                   #               
    ........           #   ............                .......             
    ........           #   ............                .......             
    ........           #   ............    ....        .......             
    ........###############............    ....        .......             
    ........               ............####....                            
    ........               ............    ....                            

下面是我要处理的代码:

void markPosition(vector<string> & vLevel, int x, int y){
    cout << "x: " << x <<endl;
    cout << "y: " << y <<endl;
    bool doubleCheck = true; //extra bool I added for testing purposes
    for( int i = 0; i < vLevel.size(); i++ ){
            for( int j = 0; j < vLevel[i].size(); j++ ){
                    //displays if x and/or y are out of range
                    if (doubleCheck){
                            if ((x < 0) || (x > vLevel[i].size())){
                                    cout << "X is out of range!" << endl;
                                    doubleCheck = false;
                            }
                            if ((y < 0) || (y > vLevel.size())){
                                    cout << "Y is out of range!" << endl;
                                    doubleCheck = false;
                            }
                    }
                    else {
                            return;
                    }
                    if ((j == x) && (i == y)){
     //////THIS IS THE PROBLEM LOL
                            cout << "match found::: " << vLevel[i][j] << endl;
                            if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')){
                                    cout << "Located in the blankness" << endl;
                                    return;
                            }
                            else {
                                    cout << "I don't get reached!!??" << endl;
                                    vLevel[i][j] = 'X';
                                    markPosition(vLevel,i-1,j);
                                    markPosition(vLevel,i+1,j);
                                    markPosition(vLevel,i,j+1);
                                    markPosition(vLevel,i,j-1);
                           }
                      }
                }
        }
}

空格在粘贴时弄乱了,所以我试着清理一下。我不明白为什么会跳过其他部分。就像我说的,这件事解决后我肯定会觉得自己很蠢。我需要睡觉,哈哈。

如果你需要更多的信息,请告诉我。提前感谢!

看:

if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#'))

这将总是求值为true。想想看。

(我想你是指if((!=)&&(!=))还是if(!((==)||(==))))