Console.Read() and Console.ReadLine() FormatException

本文关键字:Console FormatException ReadLine and Read | 更新日期: 2023-09-27 18:28:38

using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Int32 a = 3;
            Int32 b = 5;
            a = Console.Read();
            b = Convert.ToInt32(Console.ReadLine());
            Int32 a_plus_b = a + b;
            Console.WriteLine("a + b =" + a_plus_b.ToString());
        }
    }
}

我在ReadLine()函数中收到错误消息:

FormatException 未处理。

问题出在哪里?

Console.Read() and Console.ReadLine() FormatException

我想这只是因为您在键入第一个数字后按了 ENTER 键。让我们分析一下您的代码。代码读取您输入的第一个符号a Read()函数执行的变量。但是当您按回车键时ReadLine()函数返回空字符串,将其转换为整数的格式不正确。

我建议您使用ReadLine()函数来读取这两个变量。所以输入应该是7->[enter]->5->[enter]的。然后你会得到a + b = 12结果。

static void Main(string[] args)
{
    Int32 a = 3;
    Int32 b = 5;
    a = Convert.ToInt32(Console.ReadLine());
    b = Convert.ToInt32(Console.ReadLine());
    Int32 a_plus_b = a + b;
    Console.WriteLine("a + b =" + a_plus_b.ToString());
}

我认为你需要把:

b = Convert.ToInt32(Console.ReadLine());

在尝试捕获块内。

祝你好运。

你想做的是使用try catch,所以如果有人犯了错误,你可以发现

using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Int32 a = 3;
            Int32 b = 5;
            a = Console.Read();
            try
            {
                b = Convert.ToInt32(Console.ReadLine());
                Int32 a_plus_b = a + b;
                Console.WriteLine("a + b =" + a_plus_b.ToString());
            }
            catch (FormatException e)
            {
                // Error handling, becuase the input couldn't be parsed to a integer.
            }

        }
    }
}
namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Int32 a = Convert.ToInt32(Console.ReadLine());
        Int32 b = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("a + b = {0}", a + b);
    }
}

}

你可以试试这个:

Int32 a = 3;
Int32 b = 5;
if (int.TryParse(Console.ReadLine(), out a))
{
    if (int.TryParse(Console.ReadLine(), out b))
    {
        Int32 a_plus_b = a + b;
        Console.WriteLine("a + b =" + a_plus_b.ToString());
    }
    else
    {
         //error parsing second input
    }
}
else 
{
     //error parsing first input
}