【问题标题】:Why doesn't this order of code work properly?为什么这个代码顺序不能正常工作?
【发布时间】:2013-03-07 02:57:49
【问题描述】:

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

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


好的,下面简要介绍一下应该做什么:

我有一个向量,其中填充了手动设置的字符串(19 个,每个长度为 79 个字符)。这个一维向量将被视为二维向量 - 因为我试图保持它的基本。所以这个字符串向量,如果每行显示 1 个字符串,基本上会创建一个带有“.”矩形部分的网格。以及连接矩形部分的“#”路径。它应该得到一个 x 和 y 坐标,并传递给函数。它像二维向量一样循环并找到位置。它检查该位置的字符是否不是“。”或 '#' 否则,它将字符更改为 X 以标记其位置。我使用有效的 x,y 坐标设置测试,该坐标是“。”的位置。 - 问题就在 i 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);
                           }
                      }
                }
        }
}

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

如果您需要更多信息,请告诉我。提前致谢!

【问题讨论】:

    标签: c++ logic if-statement


    【解决方案1】:

    看看:

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

    这将总是评估为true。想一想。

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

    【讨论】:

    • 另一个忘记德摩根定律的程序员。 :)
    • 该死的太慢了。在我的手机上阅读它,但必须登录到计算机才能正确剪切和粘贴。 +1 为你快速的先生。
    • @ModdedLife 假设vLevel[i][j] 等于'.'。该逻辑表达式的两个部分的真相是什么,整个事情的评估结果是什么?
    • 德摩根定律没有意义,哈哈。真值表确实如此,但从逻辑上讲,它会耍花招=/我花了太长时间!
    • @c.fogelklou:是的,一些问题属于狭隘的专家,一些属于真正的天才,还有一些属于最先看到它们的人。
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2020-09-19
    • 2016-01-15
    相关资源
    最近更新 更多