我不明白'while(true)&;(“;;)“;c#中的循环

本文关键字:循环 明白 while true | 更新日期: 2023-09-27 18:17:11

While(true)循环的示例代码:

    public void HandleConnection()
    {
        TcpClient tcpClient = tcpListener.AcceptTcpClient();
        NetworkStream networkStream = tcpClient.GetStream();
        while (true)   /**Don't understand this while(true) loop**/
        {
            buffer = new byte[1024];
            n = networkStream.Read(buffer, 0, buffer.Length);
            if (n == 0)
            {
                break;
            }
        }
    }
for(;循环;):
     public void readLine(NetworkStream inputStream)
     {
        using (StreamReader reader = new StreamReader(inputStream))
        {
            char[] buffer = new char[128];
            int n;
            for (; ; ) /**Don't understand this for(; ;) loop**/
            {
                n = reader.Read();
                if (n == -1 || n == ''n')
                {
                    break;
                }
        }
      }

有没有人可以通过参考所提供的示例代码来清楚地理解上面的循环语句?谢谢你的帮助!

我不明白'while(true)&;(“;;)“;c#中的循环

第一个应该很简单:

while(true)

这仅仅意味着你应该无限循环(除非在循环中有一些break)。如果你把它当作普通的英文文本来读,它的意思应该很清楚。

另一个更难解释:

for( ; ; )

通常( ... )中的部分包含三个语句:(1)起始点,(2)退出条件,(3)增量。没有这三个语句,它就会无限循环。主要是因为没有退出条件

这些是无限循环。在第一种情况下,你正在无限循环从网络流中读取,在第二种情况下,你正在从文件流中读取。

在这两种情况下,当满足某些条件时,可以使用break来中断循环。

实现这种循环最惯用的方法是使用do-while循环。这样,您就不需要使用带有break语句的无限循环了。

例如,你的第一个例子可以变成:

int n;
do 
{
    byte[] buffer = new byte[1024];
    n = networkStream.Read(buffer, 0, buffer.Length);
} while (n != 0);

do-while循环总是执行循环体一次,并在每次迭代后测试while条件。

这两种循环都不会终止。while(true)仅仅是因为true总是为真,后者是因为没有指定终止条件。

它们只是被用来重复执行代码,直到循环在别处被打破,即当前者的n等于零时,以及当n等于-1或''n'(新行字符)

第一个可以重写为:

    n = 1;
    while (n)
    {
        buffer = new byte[1024];
        n = networkStream.Read(buffer, 0, buffer.Length);
    }

在这两种情况下,都可以切换while和for。如果你不在里面放一个断点,这两个都会永远循环下去。

这两种语法都是实现无限循环的方法

While循环表示读取,直到流中没有可读的内容为止。

对于循环说read,直到你得到一个换行字符或-1。

代码说明:

public void HandleConnection()
{
    int n;
    byte[] buffer = new byte[1024];
    TcpClient tcpClient = tcpListener.AcceptTcpClient();
    NetworkStream networkStream = tcpClient.GetStream();
    networkStream.Write(buffer, 0, buffer.Length);
    while (true)   // This is a infinity loop and does never stop ( same in the for (;;) loop )
    {
        buffer = new byte[1024];
        n = networkStream.Read(buffer, 0, buffer.Length);
        // Check if there has been data on the network stream
        if (n == 0)
        {
            // No data has been read, exit from the infinity loop
            break;
        }
    }
}

c#有两个基本的循环结构。whilefor语句允许您在循环开始时检查循环退出条件。do-while语句允许您在循环结束时检查循环退出条件。

但是,当您想要检查中间中的循环退出条件时,该怎么做呢?

您只需使用其中一个语句,并且而不是检查其中的循环退出条件:

for (;;) {
    statements;
    if (exitExpression) break;
    statements;
}

While(true)为无限循环。循环将一直运行,直到networkStream.Read(buffer, 0, buffer.Length);返回0。如果返回0值,则循环中断:

  if (n == 0)
  {
    break;
  }

for循环也是如此。循环将再次无限运行。当reader.Read();返回值-1''n'时,应用程序将退出循环。重要的是要记住,当您使用双逻辑运算符(n == -1 || n == ''n')而不是单逻辑运算符(n == -1 | n == ''n')时,当第一个逻辑语句为真时,就足以输入'if'语句。如果第一个逻辑语句为真,则第二个语句甚至不会被检查。