【问题标题】:How to increment counter in for loop? (Pascal)如何在for循环中增加计数器? (帕斯卡)
【发布时间】:2017-05-26 17:15:10
【问题描述】:

我有一个大问题,因为这段代码在 Dev-Pascal 中正确编译,但在 Lazarus 中编译不正确。

 for k:=1 to n do
     begin
          writeln(a[k]:4:2,'  ',a[k+1]:4:2,'  ',a[k+2]:4:2);
          inc(k,2);
     end;

我收到了这条消息

错误:对 for 循环变量“k”的非法赋值

我现在应该做什么?我的程序中需要这个解决方案(递增 k 计数器)。

【问题讨论】:

  • for k := 0 to n div 3 - 1 do begin writeln(a[k * 3 + 1]:4:2, ' ', a[k * 3 + 2], ... 怎么样?如果我必须在每次迭代中访问 3 个元素,这就是我会做的。

标签: for-loop increment pascal


【解决方案1】:

实际上,我认为这更像是 Dev-Pascal 让您侥幸逃脱的案例,而 FP 则没有。编译器通常不会让您在循环中修改for 变量的原因是它可以破坏编译器生成的代码以确定何时达到上限for 值。

添加一个局部变量j,为其分配与k 相同的起始值,在for 循环内将其递增2,并使用j 作为数组索引器而不是k

【讨论】:

  • "在里面增加 2" - 抱歉,我不明白。你能解释一下吗?
  • Inc(j, 2)j := j + 2
  • 谢谢!但最后我用重复循环来做到这一点。 k:=1; repeat writeln(a[k]:4:2,' ',a[k+1]:4:2,' ',a[k+2]:4:2); inc(k,3); until k>=n;
【解决方案2】:

Delphi 不允许修改循环变量,TP 允许。 FPC 在其自己的模式下遵循 Delphi,因为这是明智的做法,因为 MartynA 列出了令人沮丧的优化。

但是 FPC 确实允许它在 Turbo Pascal 模式下用于旧代码库,添加 {$mode tp} 或使用 -Mtp 编译

【讨论】:

  • TP 没有,AFAIK。至少最新版本(TP7、TP6、TPW1.5 等)没有。
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2013-12-16
  • 2023-03-08
  • 2012-11-26
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多