-1

所以我一直在这个程序的一部分上工作了几个小时。我有几行代码已经困扰了我一个多小时。这没有任何意义。我一遍又一遍地阅读这些台词,并在脑海中思考它应该做什么,但它没有这样做!这可能是我一直忽略的一些愚蠢的错误(通常发生在我身上..),或者可能是由于缺乏睡眠/过去几个小时一直在努力。

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


好的,所以这里是应该做的快速运行:

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

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

如果您需要更多信息,请告诉我。先谢谢了!

4

1 回答 1

3

看着:

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

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

(我想你的意思是if((!=)&&(!=))if(!((==)||(==)))。)

于 2013-03-07T03:03:47.703 回答