c# - Console.ReadLine 将 48 添加到 int

标签 c# out

当我向 ReadLine() 输入 0 时,我得到 48。

这是一个错误吗?

class Program
{
    static void Main(string[] args)
    {
        string name;
        int age;

        readPerson(out name, out age);
    }
    static void readPerson(out string name, out int age)
    {
        Console.Write("Enter name: ");
        name = Console.ReadLine();
        Console.Write("Enter age: ");
        age = Console.Read();
        Console.WriteLine("Name: {0}; Age: {1}", name, age.ToString());
    }
}

最佳答案

不,这根本不是错误。

Console.Read() 返回输入的任何字符的 ASCII 字符代码。数字 0 的 ASCII 码是 48,数字 1 的 ASCII 码是 49,依此类推。不是随便加数字48,也不是跟out参数有什么关系。

您需要读取一行并将输入相应地转换为整数:

Console.Write("Enter age: ");
age = Convert.ToInt32(Console.ReadLine());

如果出于任何原因需要使用 Read(),那么就像我在评论中所说的那样,您需要将结果转换为 char。您还需要将变量从 int age 更改为 char age:

class Program
{
    static void Main(string[] args)
    {
        string name;
        char age;

        readPerson(out name, out age);
    }
    static void readPerson(out string name, out char age)
    {
        Console.Write("Enter name: ");
        name = Console.ReadLine();
        Console.Write("Enter age: ");
        age = (char) Console.Read();
        Console.WriteLine("Name: {0}; Age: {1}", name, age.ToString());
    }
}

请记住,Read() 一次只能读取一个字符,因此如果您需要解析多于一位的年龄,这将不起作用,您只使用 ReadLine() 会更好。

关于c# - Console.ReadLine 将 48 添加到 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156363/

相关文章:

iPhone/iPad 应用程序开发 TV Out

c# - 每次调用最小起订量时,模拟方法输出不同的输出参数

c# - 如何从 C# 中的 pvk 文件中读取私钥?

c# - 在 C# 中设置系统卷 Windows 10

c# - 移动应用程序中的移动打印格式自定义

c# - 在 C# 中通过引用传递对象的标准方法是什么

c# - 使用 C# 在 XAML 中更改按钮的图像

c# - 具有长属性名称的 WCF DataContractSerializer 性能

c# - 在方法中使用 c# out/ref 关键字 "return"> 1 项而不是对象有好处吗

c# - TryParse困境-处理out参数