如何从内部打破尝试/接球之外的循环

本文关键字:循环 内部 | 更新日期: 2023-09-27 18:13:02

我正在为学校做一个简单的课堂项目,以实验c#中的继承和其他要素,但我在某些部分遇到了问题。我相信我需要在无条件while循环中进行try-catch,以确保用户以正确的形式输入数据,但我也需要能够从错误处理代码中跳出循环。我在代码下面放了一条注释,这给我带来了问题。

class Program : students
{
    static void Main(string[] args)
    {
        students stu = new students();
        Console.Write("Number of students are you recording results for: ");
        int studNum = int.Parse(Console.ReadLine());
        stu.setNoOfStudents(studNum);
        Console.WriteLine();
        for (int a = 0; a < studNum; a++)
        {
            Console.Write("{0}. Forename: ", a + 1);
            stu.setForname(Console.ReadLine());
            Console.Write("{0}. Surname: ", a + 1);
            stu.setSurname(Console.ReadLine());
            while (0 == 0)
            {
                try
                {
                    Console.Write("{0}. Age: ", a + 1);
                    stu.setstudentAge(int.Parse(Console.ReadLine()));
                    Console.Write("{0}. Percentage: ", a + 1);
                    stu.setpercentageMark(int.Parse(Console.ReadLine()));
                    stu.fillArray();
                    break;
                    // This is the block that gives me problems; the
                    // while loop doesn't break.
                }
                catch (Exception)
                {
                    Console.WriteLine("This must be a number.");
                }
            }
        }
    }
}

我没有收到错误,因为它在try/catch中,但while(0==0(循环从未中断,因此for循环无法迭代命令。有人能给我一个解决方案吗?

如何从内部打破尝试/接球之外的循环

试试这个而不是中断

bool stop = false;
while (!stop)
{
    try
    {
        // Time to exit the loop
        stop = true;
     }
     catch { ... }
}

break应该会带您离开while loop。如果你走过去,break会发生什么?

我建议使用Int.TryParse:

bool input_ok = false;
int input;
while (! input_ok)
{     
     Console.Write("{0}. Age: ", a + 1);
     input_ok = int.TryParse(Console.ReadLine(), out input);
     if (input_ok)
        {
            stu.setstudentAge(input)
        }
}

CCD_ 5循环应该一直运行,直到得到合适的内容为止。所有这些都在for loop中。

这个问题具有误导性。break确实是正确的方法(不需要标志和假异常(,而且它有效(在您的情况下会中断while循环(。代码中唯一保持循环的分支是catch块,但我想这是有意的(否则while循环毫无意义(。

您可以尝试这种方法

添加fakeexception

public class FakeException: Exception { }

示例代码:

try
{
      //break;
      throw new FakeException();
}
catch(Exception ex)
{
   if(ex is FakeException) return;
   //handle your exception here
}