增加for循环计数器的值

时间:2011-10-20 12:57:16

标签: language-agnostic loops programming-languages

是否有任何编程语言/脚本不允许在循环内增加FOR循环的计数器?

例如:

for(int i = 0; i < 10; i++) 
{
    i++;
    print i
}

Output: 1 3 5 7 8 9

6 个答案:

答案 0 :(得分:4)

不确定我完全理解你的问题,但

在python中:

for i in range(10):
    print i
    i+=1  #if I print i now I will get i+1, 

您将返回与以下相同的结果:

for i in range(10):
    print i

即:

  

0 1 2 3 4 5 6 7 8 9

答案 1 :(得分:2)

Pascal(例如)基本上说在循环中更改变量给出了未定义的行为(Pascal用户手册,§C.3):“控制变量,初始值和最终值必须是相同的标量type(不包括real类型),不能被for语句改变。“

IIRC,Ada确实阻止您进行此类修改。看着圣经似乎证实了我完全体弱的记忆(Ada 95 RM,§5.5(10)):“一个循环参数是一个常数;它不能在循环的sequence_of_statements中更新。”

答案 2 :(得分:2)

PL / SQL不允许您修改循环变量:

SQL> begin
  2    for i in 1..10 loop
  3      i := i + 1;
  4    end loop;
  5  end;
  6  /
    i := i + 1;
    *
ERROR at line 3:
ORA-06550: line 3, column 5:
PLS-00363: expression 'I' cannot be used as an assignment target
ORA-06550: line 3, column 5:
PL/SQL: Statement ignored

答案 3 :(得分:1)

我不知道任何语言明确禁止它。但是它有什么后果有不同的概念。

  1. 变量,就像在C

    中一样

    在C中,这个循环导致有效地制作2的步骤,显而易见。

  2. 迭代器,就像在Python中一样

    在Python中,像这样的循环由迭代器提供,迭代器不断产生独立于变量的新值。

    for i in range(0, 100):
       print "A:", i
       i += 1
       print "B:", i
    

    导致

    A: 0
    B: 1
    A: 1
    B: 2
    ....
    

    当您在C中的循环提供正确的输出时,将导致

    A: 0
    B: 1
    A: 2
    B: 3
    ....
    

答案 4 :(得分:1)

我认为C ++ 11基于范围的for循环允许你阻止它:

for (const int i : some_range) {
    ++i; // forbidden
}

但我不认为标准提供了一种简单的方法来定义整数范围,就像在普通for循环中一样。 some_range可以是容器,也可以是boost::counting_range

您是否认为这是“FOR循环的计数器”取决于您。我想一个“正确的”示例将是一个循环,它采用任意表达式来修改循环之间的计数器(在您的示例中为i++),但是不允许在循环中修改计数器而不是表达

答案 5 :(得分:0)

不是我知道的。但是,在C#中,您可以为每个执行一次,如果更改了集合,它将抛出异常。

int[] myArray = new int[100];
foreach (var item in myArray)
{

}