对于循环:变量的递增和递减[关闭]

Posted

技术标签:

【中文标题】对于循环:变量的递增和递减[关闭]【英文标题】:For cicle: increment and decrement of variables [closed] 【发布时间】:2015-07-13 13:48:45 【问题描述】:

我写了一个这样结构的代码

int function()
        int i, counter = 0;

        for(i=INTEGER; i>0; ++counter, --i)
               if(condition)
                   //do stuff
                   i+=2;
                   continue;
               
               if(condition)
                   //do stuff
                   i+=35;
                   continue;
               
               if(condition)
                   //do stuff
                   continue;
               
               if(condition)
                   //do stuff
                   continue;
               
         
         return counter;
    

我无法完全理解变量作为 cicle 参数的增量机制。 在上述情况下:

怎么可能i 变量的增加和减少效果很好,而返回时的counter 变量只有1 增加? 有可能吗?

【问题讨论】:

不明白你的问题。请澄清! @ARBY 如果 INTEGER 定义值为 10,例如,返回时变量 counter 的值应该是 10,对吧?相反,他的值为 1。 请发布任何人都可以运行的真实代码。还请在代码中添加输出(printf 语句)以演示问题。 他说即使循环执行多次,变量“counter”也只会增加一次。他想知道这是否可能,是否是因为他使用了“继续”。 @Anon316 在这种情况下,我们希望得到您的答复。坦率地说,我也没有理解这个问题。我的英语水平很糟糕,顺便说一句:-) 【参考方案1】:

变量counter在for语句中增加的次数与变量i在for语句中减少的次数相同

for(i=INTEGER; i>0; ++counter, --i)

continue 语句之后的这部分 for 语句

++counter, --i

被执行。

其实这个循环带有 continue 语句

    for(i=INTEGER; i>0; ++counter, --i)
           if(condition)
               //do stuff
               i+=2;
               continue;
           
           //...
     

等价于以下

    for(i=INTEGER; i>0; ++counter, --i)
           if(condition)
               //do stuff
               i+=2;
               goto Label;
           
           //...
     Label:;
     

【讨论】:

好的,这也是我知道的。但是当我执行我的代码时,我只增加了一次。变量counter 没有在我的代码中的其他地方使用。这很奇怪。 @wing 你确定循环不止一次迭代吗?也许由于循环体内变量 i 的变化,循环只有一次迭代。 但是在你的代码中,你也修改了循环体中的i,而你只在for头部增加了计数器,除非你在你的部分触摸counter我躲在// do stuff 后面。你怎么知道你的循环被多次输入了?【参考方案2】:

好的,伙计们,我调试了我的代码,错过了 main 末尾的 return 0。 这导致了错误的返回值。

【讨论】:

那么请删除您的问题,因为这是一个简单的印刷错误。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。这通常可以通过在发布之前确定并仔细检查重现问题所需的最短程序来避免。 它不让我删除问题,我现在尝试了 @moffeltje - 除了正确理解逗号运算符可能对其他程序员有用。这难道不会让它变得有价值吗? @Anon316 试着想象你正在搜索那个特定的信息,你会遇到这个问题不清楚并且每个人都对这个问题感到困惑的问题(除了你)。你会继续阅读还是只看一个clearer question,甚至是一个简单的tutorial? @moffeltje - 我明白你的意思。你是对的。【参考方案3】:

你所说的正在发生,不应该发生。逗号运算符将两个语句组合在一起,以便将它们作为单个语句执行。如果执行了 --1,则 ++counter 也应该同时执行。正在发生其他事情。

【讨论】:

对不起先生,我误解了as的意思。我不想在这里陷入任何争论。我删除了我的cmets。如果我以任何方式伤害了你,对不起。我只是想正确。就是这样。 没有冒犯,我希望没有冒犯。我也删除了我的cmets。 “一切都好,结局好。”顺便说一句,你的英语很出色。

以上是关于对于循环:变量的递增和递减[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

循环中的预递增/递减与 gcc 和 Visual C 的后递增/递减 [重复]

递增递减运算符

递增和递减运算符

JavaScript递增和递减运算符

JavaScript运算符:递增和递减(++i,--i 和 i++,i-- 的区别)

i++与++i 递增递减运算符的前置与后置