C# 切换、案例、尝试并抓住C问题
我对C编程非常陌生。我想捕捉错误,例如无效输入,而不是1-6之间的数字,然后打印一条说明错误的消息。这是我的密码C# 切换、案例、尝试并抓住C问题,c#,switch-statement,try-catch,C#,Switch Statement,Try Catch,我对C编程非常陌生。我想捕捉错误,例如无效输入,而不是1-6之间的数字,然后打印一条说明错误的消息。这是我的密码 private static bool ManageStudents() { Console.Clear(); Console.WriteLine("========================"); Console.WriteLine(" Choose an option:"); Console.Write
private static bool ManageStudents()
{
Console.Clear();
Console.WriteLine("========================");
Console.WriteLine(" Choose an option:");
Console.WriteLine(" 1. Add a new student");
Console.WriteLine(" 2. View all students");
Console.WriteLine(" 3. Search students");
Console.WriteLine(" 4. Delete students");
Console.WriteLine(" 5. Update students");
Console.WriteLine(" 6. Back to main menu");
Console.WriteLine("========================");
Console.Write("\r\nPlease choose: ");
try
{
switch (Console.ReadLine())
{
case "1":
AddStudents();
return true;
case "2":
ViewStudents();
return true;
case "3":
SearchStudents();
return true;
case "4":
DeleteStudents();
return true;
case "5":
UpdateStudents();
return true;
case "6":
return false;
default:
return true;
}
}
catch (Exception e)
{
Console.WriteLine("error message");
Console.ReadLine();
return true;
}
}
当我运行程序时,输入无效字符后,错误消息没有出现。Replace
default:
return true;
与
在switch语句中使用的默认值就是这样——如果找不到匹配项,则默认为这种情况。如果希望try块失败,则需要在默认值内引发异常
您告诉它返回true而不出错。你应该把它改成
default:
throw new Exception("Invalid Selection")
您需要理解调用缺省值和调用catch之间的区别。如果此处的数字不在1-6的范围内,则当所有情况均为真时,将调用默认值。当开关中的一个函数抛出异常时调用catch,异常可能是AddStudents或SearchStudents,等等 然后,您可以通过添加一个接收消息作为参数的函数来更一般地处理错误。那么你应该有这样的东西:
private static bool HandleError(string message) { // More generic handling
Console.WriteLine(message);
Console.ReadLine();
return true;
}
private static bool ManageStudents()
{
Console.Clear();
Console.WriteLine("========================");
Console.WriteLine(" Choose an option:");
Console.WriteLine(" 1. Add a new student");
Console.WriteLine(" 2. View all students");
Console.WriteLine(" 3. Search students");
Console.WriteLine(" 4. Delete students");
Console.WriteLine(" 5. Update students");
Console.WriteLine(" 6. Back to main menu");
Console.WriteLine("========================");
Console.Write("\r\nPlease choose: ");
try
{
switch (Console.ReadLine())
{
case "1":
AddStudents();
return true;
case "2":
ViewStudents();
return true;
case "3":
SearchStudents();
return true;
case "4":
DeleteStudents();
return true;
case "5":
UpdateStudents();
return true;
case "6":
return false;
default:
return HandleError("Out of range"); // Not in range 1-6
}
}
catch (Exception e) // This catch exception happening in the all switch
{
return HandleError("Execution problem");
}
}
您的逻辑非常清楚:如果给定的数字不在有效数字列表中,请打印错误消息 所以,不要使用异常作为逻辑的一部分,异常是针对异常的,针对非预期的情况。此外,抛出异常将比使用switch case处理异常稍微贵一些
现在,您可以删除所有文件并重试。。挡块 您认为代码的哪一部分会触发catch块中的代码运行?尝试进一步阅读如何工作。如果Try块抛出异常,则输入catch块。若你们想处理开关箱以外的东西,你们应该把它放在默认的箱子上。在这种情况下不要使用try-catch。使用其他语句检查输入是否符合默认值。您正在从此方法返回布尔值。。真的意味着一切顺利吗?此外,即使您在默认情况下将语句更改为抛出异常,最终还是会从catch块返回true。您可能希望从catch块返回false。谢谢,我将对它们进行更多的阅读!我几天前才开始使用C,我只是在玩它。这些都是非常有用的评论,我很感激!您的答案可能解决了一个问题,但在这个社区中它被标记为低质量,因为您的答案只包含代码而不包含解释。请编辑详细信息虽然此代码可能提供问题的解决方案,但最好添加有关其工作原因/方式的上下文。这可以帮助未来的用户学习,并将这些知识应用到他们自己的代码中。在解释代码时,用户可能会以投票的形式向您提供正面反馈。很抱歉,回复太晚!非常感谢你,这很有效!这也行谢谢你的帮助!
default:
throw new Exception("Invalid Selection")
private static bool HandleError(string message) { // More generic handling
Console.WriteLine(message);
Console.ReadLine();
return true;
}
private static bool ManageStudents()
{
Console.Clear();
Console.WriteLine("========================");
Console.WriteLine(" Choose an option:");
Console.WriteLine(" 1. Add a new student");
Console.WriteLine(" 2. View all students");
Console.WriteLine(" 3. Search students");
Console.WriteLine(" 4. Delete students");
Console.WriteLine(" 5. Update students");
Console.WriteLine(" 6. Back to main menu");
Console.WriteLine("========================");
Console.Write("\r\nPlease choose: ");
try
{
switch (Console.ReadLine())
{
case "1":
AddStudents();
return true;
case "2":
ViewStudents();
return true;
case "3":
SearchStudents();
return true;
case "4":
DeleteStudents();
return true;
case "5":
UpdateStudents();
return true;
case "6":
return false;
default:
return HandleError("Out of range"); // Not in range 1-6
}
}
catch (Exception e) // This catch exception happening in the all switch
{
return HandleError("Execution problem");
}
}
private static bool ManageStudents()
{
switch (Console.ReadLine())
{
case "1":
AddStudents();
return true;
case "2":
ViewStudents();
return true;
case "3":
SearchStudents();
return true;
case "4":
DeleteStudents();
return true;
case "5":
UpdateStudents();
return true;
case "6":
return false;
default:
Console.WriteLine("Invalid selection");
return true;
}
}