用于无条件循环

本文关键字:循环 无条件 用于 | 更新日期: 2023-09-27 17:58:40

我遇到了这个代码

var i=Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
for(int x=i[0]-i[2],y=i[1]-i[3];;Console.WriteLine((0!=y?0<y--?"S":"N":"")+(0!=x?0<x--?"E":"W":"")));

我想我理解int x=i[0]-i[2],y=i[1]-i[3],但让我困惑的是没有结束条件。所以我的问题是,这个循环是如何终止的?

我看到了这个关于无尽循环的答案。

对于无条件的环路

用于无条件循环

在编程语言中,有一些循环被编写为永久运行,除非收到一些外部条件(例如,异常或用户信号)。有些时候,这样的"无限"循环是写错的。

问题中的循环似乎只是无限循环的又一种情况,可能是故意写的

循环

for(int x=i[0]-i[2],y=i[1]-i[3];;Console.WriteLine((0!=y?0<y--?"S":"N":"")+(0!=x?0<x--?"E":"W":"")));

这个问题永远不会结束。你可以在它后面放一些类似Console.WriteLine("Loop finished, yet.")的东西来检查它。这条线永远不会到达。

你看到循环无论如何都会结束,可能有以下原因之一:

  • 根据用户对ReadLine语句的输入,初始化数组或使用int x=i[0]-i[2],y=i[1]-i[3]访问数组将导致异常。然后循环将不会执行
  • 也许执行循环的线程被中止了
  • 如果在不中止线程或其他事情的情况下执行循环,则循环变量x和y最终都将为零。然后循环将只生成空行。也许有人误解这就是结局。但循环仍在继续。(变量x和y最终都将为零,因为在每一步中,如果它们不为零,它们都会减少1。如果它们从负值开始,它们将达到尽可能小的整数值,之后它们将达到最大的整数值。这是正的。然后它们将正常减少,直到它们达到零。然后它们总是保持零。)

然而,循环是无限的。如果它被中止,原因肯定不在那个循环中,只在外部。

在我看来,for循环的迭代部分只用于更改循环变量。其中一个发明了循环的主体部分,用于屏幕输出之类的其他东西。因此,上面的循环是坏代码。