【问题标题】:C# Try and Catch error messageC# 尝试并捕获错误消息
【发布时间】:2017-04-04 21:18:04
【问题描述】:

我最近开始使用 c# 进行编码,但我遇到了一个我已经尝试解决了几个小时的问题,所以我想我会尝试一下。这基本上是一个简单的程序,用户可以在其中猜测 1-20 之间的数字,计算机会告诉您这个数字是太小还是太大,或者它是否正确。

除了 try 和 catch 部分外,一切正常。我希望用户每次输入字符串而不是数字时都会收到错误消息。我尝试了不同的解决方案,但我无法弄清楚我必须放入 try 块中的内容。正如我所说,当我不使用 try 和 catch 时程序运行良好,但是当我使用它时,每次都会出现错误消息,所以请帮助我并告诉我我必须在 try 部分写什么代码。

这是代码:

using System;

namespace Uppgift_4
{
    class Program
    {
        static void Main(string[] args)
        {
            Random slumpat = new Random();
            int speltal = slumpat.Next(1,20); 

            bool spela = true; 
            while (spela)
            {
            Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
            int tal;
            Int32.TryParse(Console.ReadLine(), out tal);

            try
            {

            }
            catch
            {
                Console.WriteLine("Fel, du får bara skriva in nummer");
            }


            if (tal < speltal)
            {
                Console.WriteLine("\tDet inmatade talet " + tal + " är för litet, försök igen.");
            }

            else if (tal > speltal)
            {
                Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen.");
            }

            else
            {
                Console.WriteLine("\tGrattis, du gissade rätt!");
                spela = false;
            }

        }
    }
}

}

【问题讨论】:

    标签: c# while-loop try-catch


    【解决方案1】:

    当你使用Int32.TryParse 时,如果给定的字符串不能被解析为整数,则不会抛出异常。这个方法只会返回false。你应该检查一下:

    Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
    int tal;
    if(!Int32.TryParse(Console.ReadLine(), out tal))
    {
        Console.WriteLine("Fel, du får bara skriva in nummer");
        continue;
    }
    

    当您使用Int32.Parse 时,如果字符串无法解析,则会抛出异常:

    Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
    int tal;
    try
    {
       tal = Int32.Parse(Console.ReadLine());
    }
    catch
    {
        Console.WriteLine("Fel, du får bara skriva in nummer");
        continue;
    }
    

    【讨论】:

    • 应该在catch System.FormatException中指定异常。
    • 非常感谢您的快速回答。这肯定行得通,唯一的问题是我必须在学校使用 try and catch 方法。我可以在 try and catch 方法中以某种方式抛出异常吗?
    • @CNuts 不仅有FormatException - 也可以有OverflowException
    • @SergeyBerezovskiy 指定它们然后让它捕获任何异常不是更好吗?
    • @SergeyBerezovskiy 是的,我的朋友我做到了 :) 现在一切正常,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多