为啥此代码片段返回意外结果?

Posted

技术标签:

【中文标题】为啥此代码片段返回意外结果?【英文标题】:Why is this code fragment returning unexpected results?为什么此代码片段返回意外结果? 【发布时间】:2017-12-24 15:01:33 【问题描述】:

我目前正在学校学习 C++,并且正在制作一个单词侦探作为我必须提交的项目的一部分。为此,我已经制作了字母网格和其他必要的东西(线索、规则等)。我以整数数组中的坐标形式输入,用户在数组中输入 4 个值,表示初始行号和列号以及最终行号和列号,对应于 a 的第一个和最后一个字母特定的词。

完成此操作后,我现在将用户输入的数组与我已经定义的具有该特定单词坐标的数组进行比较。这显示在这里:

    cout<<"Enter the coordinates of starting and final characters : row1 col1 row2 col2 "<<endl;
    for (z = 0; z < 4; z++)      //first for loop
        cin>>p[z];              //taking the input as an array 'p'

    for (b = 0; b < 4; b++)        //second for loop
    
        if (p[b] == messi[b])
            b+=0;
    
    if (b == 4)
        cout<<"Great!!!! You have answered the question correctly"<<"\n\n";
    else
        cout<<"You got this one wrong mate! Try again :)"<<"\n\n";

这里,messi[b] 是一个数组,其坐标对应于网格中的单词“MESSI”。现在,在我看来,第二个 for 循环之后的 'if' 语句必须包含检查 b = 3 的条件。但是,当我这样做时,输出始终是 'else' 语句所说的,即“你得到了这个......”对于每个输入。但是,当我施加条件来检查 b = 4 时,输出结果就是“if”语句所说的,即每个输入的“太棒了!!...”。

我做错了什么?我希望我在向您解释问题时足够清楚。我正在使用 CodeBlocks 16.01。

【问题讨论】:

您对b+=0; 有什么期望?你对封闭循环有什么期望? 你能粘贴你的输出吗 好吧,我的输出屏幕不允许我从那里复制内容。 【参考方案1】:

有点不清楚你在做什么,就程序而言,b 在第二个for-loop 之后总是等于 4,因为最后一次条件为真,b &lt; 4。所以在增量之后,它为 4。

在第二个 for-loop 中,您还有 NOP 代码 b += 0;,它对代码完全没有任何作用。这里的意图是什么?

【讨论】:

哦,我刚刚弄清楚错误是什么。我现在已经纠正了。可能我在解释这个问题时不够清楚。还是谢谢。

以上是关于为啥此代码片段返回意外结果?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个代码片段说包含错误?

为啥这段代码会泄露? (简单的代码片段)

Xcode 8 Autocomplete Broken - 仅显示有限的用户代码片段 - 知道为啥吗?

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

php函数返回意外 (可能是unicode或字节码引起的)

为啥代码片段在 matplotlib 2.0.2 上运行良好,但在 matplotlib 2.1.0 上引发错误