对于没有条件的循环

时间:2016-07-27 00:59:15

标签: c#

我遇到了这段代码

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 Loop without condition

2 个答案:

答案 0 :(得分:4)

在编程语言中,除非接收到某些外部条件(例如,异常或用户信号),否则有些循环被写入以永久运行。有时,这种“无限”循环是错误写入的。

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

答案 1 :(得分:0)

循环

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循环的迭代部分仅用于更改循环变量。一个人发明了循环的身体部分,用于其他东西,如屏幕输出或其他东西。因此,上面的循环是错误的代码。