是否有任何编程语言/脚本不允许在循环内增加FOR循环的计数器?
例如:
for(int i = 0; i < 10; i++)
{
i++;
print i
}
Output: 1 3 5 7 8 9
答案 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)
我不知道任何语言明确禁止它。但是它有什么后果有不同的概念。
变量,就像在C
中一样在C中,这个循环导致有效地制作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)
{
}