为什么这个C#代码输出错误的整数?

问题描述 投票:-5回答:3

因此,我正在尝试使用C#进行编程,绝对没有任何超越性。所以我尝试制作一个简单的程序,读取用户输入并再次输出给用户。现在这个名字部分都很好,但是当我尝试输入我的年龄时。 20岁,它总是写着“你的输入已被保存。你已经49岁了。”无论我输入什么数字,它总是给我49,我在代码中看不出会导致这个问题。你知道什么是错的吗?

        Console.Write("Insert Age: ");
        int age = Convert.ToInt32(Console.Read());
        if (age < 18)
        {
            Console.WriteLine("Whoops! Looks like you are only " + age + " Year(s) old! You are too young to have your input saved.");
        }
        else
        {
            Console.WriteLine("Your input has been saved. You are " + age + " Year(s) old.");
        }
c#
3个回答
1
投票

Console.Read()方法只从控制台读取一个字符。如果要读取数字,例如20或77,则需要Console.ReadLine()方法。这将读取包含您的号码的整行。

我强烈建议您使用int.TryParse()方法而不是Convert.ToInt32()方法,因为在某些情况下转换将失败。例如,如果有人以错误的格式输入输入,他将引入这一行:20a。然后你的程序会崩溃。

使用int.TryParse()方法非常简单。您的代码将如下所示:

    Console.Write("Insert Age: ");
    if( true == int.TryParse(Console.ReadLine()) )
    {
       if (age < 18)
       {
          Console.WriteLine("Whoops! Looks like you are only " + age  
                          + " Year(s) old! You are too young to have your input saved.");
       }
       else
       {
          Console.WriteLine("Your input has been saved. You are " 
                             + age + " Year(s) old.");
       }
    }
    else
    {
       Console.WriteLine("This is not a number."); // Or any message you want
    }

为了缩短这段代码,您可以尝试编写如下代码:

    Console.Write("Insert Age: ");
    if( true == int.TryParse(Console.ReadLine()) )
    {
       Console.WriteLine( age < 18 ? 
         "Whoops! Looks like you are only " + age + 
         " Year(s) old! You are too young to have your input saved." :
         "Your input has been saved. You are " + age + " Year(s) old.");
    }
    else
    {
       Console.WriteLine("This is not a number."); // Or any message you want
    }

如果你想更短,那么试试:

    Console.Write("Insert Age: ");
    Console.WriteLine( int.TryParse(Console.ReadLine()) ?
       (age < 18 ?
            "Whoops! Looks like you are only " + age 
             + " Year(s) old! You are too young to have your input saved." 
         : "Your input has been saved. You are " + age + " Year(s) old.") 
      : "This is not a number.");

0
投票

这个问题是一个基本的理解问题。 .NET在这里做的一切都很好。

请看看Console.Read()方法。如您所见,它返回Int32值。意思是,在你的情况下:它读取输入流的第一个char。如果在控制台中输入“23”,那么2被认为是char,根据ASCII,它代表值50.然后,你取50并将其转换为整数:age = 50

可能解决方案

根据MSDN

int age = Convert.ToInt32(Console.ReadLine());

希望有所帮助。


0
投票

Console.Read()只从标准输入中读取下一个字符,Console.ReadLine()从标准输入流中读取下一行字符。


来自@VMAtm的逐字来源:Difference between Console.Read() and Console.ReadLine()?

© www.soinside.com 2019 - 2024. All rights reserved.