从控制台读取输入时,我的整数出错了

时间:2015-09-16 15:44:37

标签: c#

年龄变量总是出现" 49"。这是我的代码......

using System;

namespace testCS
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "Bob";
            int age = 0;

            Console.Write("What is your name? ");
            name = Console.ReadLine();
            Console.WriteLine("Hello, " + name);

            Console.Write("How old are you? ");
            age = Console.Read();
            Console.WriteLine(name + ", age " + age);

            Console.ReadLine();
            Console.WriteLine("Press any key to continue...");
            Console.ReadLine();
        }
    }
}

5 个答案:

答案 0 :(得分:5)

您正在使用Console.Read()。它读取一个字符并将其代码点返回为int。你应该使用

int.Parse(Console.ReadLine());

这会将一行读作string,然后将其转换为int。

您还可以使用int.TryParse(),它会尝试解析字符串并在成功时返回true

int age;
if(int.TryParse(Console.ReadLine, out age)) 
{
    // success
}
else
{
    // invalid input
}

答案 1 :(得分:3)

尝试在将输入分配给int之前解析输入。

age = Int32.Parse(Console.ReadLine());

Console.Read()方法返回您在控制台中输入内容的字符代码。

答案 2 :(得分:3)

Console.Read 返回int,但它是字符代码,而不是从命令行读取的整数。

Console.Read Method

相反,您应该使用ReadLine然后使用TryParseParse

答案 3 :(得分:2)

Console.Read()读取一个字符并返回一个整数,这是一个老式的ASCII字符代码。

因此,如果您输入 18 ,则Console.Read()将

  • 读取第一个字符1
  • 转换字符' 1'到ASCII是49
  • 返回整数49

答案 4 :(得分:1)

此处发布的所有解决方案的替代方案,受到Max(现已删除)此问题评论的启发。

using System;

namespace testCS
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "Bob";
            string age = "";

            Console.Write("What is your name? ");
            name = Console.ReadLine();
            Console.WriteLine("Hello, " + name);

            Console.Write("How old are you? ");
            age = Console.ReadLine();
            Console.WriteLine(name + ", age " + age);

            Console.ReadLine();
            Console.WriteLine("Press any key to continue...");
            Console.ReadLine();
        }
    }
}

基本上,如果您不打算使用数学来操纵年龄,并且您没有特别需要强制age是一个数字,那么您可以使用字符串作为数据类型年龄变量,并确保在用户输入年龄时读取整行。现在你可以输入" 49"," 50.5"," old"," young","大约24个月&#34 ;对于年龄和程序仍然有效。根据您要完成的任务,这可能是可以接受的。