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

时间:2013-03-07 02:57:50

标签: c++ logic if-statement

所以我一直在为这个项目的一部分工作几个小时。我有几行代码让我困扰了一个多小时。它没有意义。我一遍又一遍地读着这些线条,想想它应该做些什么,但它没有做到!这可能是我一直忽视的一些愚蠢的错误(通常发生在我身上......),或者可能是因为睡眠不足/在过去的几个小时内一直在工作。

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


好的,所以这里应该快速了解应该做的事情:

我有一个向量,用手动设置的字符串填充(19个,每个长度为79个字符)。这个1维向量将被视为2d向量 - 因为我试图保持它的基本。所以这个字符串向量,如果每行显示1个字符串,基本上会创建一个矩形部分为“。”的网格。以及连接矩形部分的“#”路径。它应该得到一个x和y坐标,传递给函数。它像2d矢量一样循环并找到位置。它会检查该位置的字符是否为“。”。或'#'else,它将char更改为X以标记其位置。我使用有效的x,y坐标设置测试,该坐标是'。'的位置。 - 问题就在我cout“match found :::”的行之后,当程序运行时,它显示vLevel [i] [j] ='的值。但由于某种原因,它没有进入else语句,其中函数被调用了4次,我把cout语句。看看网格是什么样的。空格是空格..每一行都是向量中的一个字符串:

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

继承我正在处理的代码部分:

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);
                           }
                      }
                }
        }
}

粘贴时,间距搞砸了,所以我试着把它清理一下。我不明白为什么它会跳过其他人。就像我说的,我相信一旦解决这个问题,我会感到愚蠢。我需要睡觉哈哈。

如果您需要更多信息,请与我们联系。先谢谢!

1 个答案:

答案 0 :(得分:3)

看看:

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

这将始终评估为true。想一想。

(我认为您的意思是if((!=)&&(!=))if(!((==)||(==)))。)