为什么C#整数输入不';你不接受正确的值吗?

为什么C#整数输入不';你不接受正确的值吗?,c#,parsing,input,console,integer,C#,Parsing,Input,Console,Integer,我最近开始用C#编写代码,所以我现在只是在学习基础知识。我曾尝试通过谷歌搜索这个问题,但在这个网站上,我找不到任何解决方案,但基本上,当我使用Console.Read()并将输入值存储到整数变量中时,我输入的值在输出时会有奇怪的不同 下面是我试图运行的代码块: Console.WriteLine("Welcome To The Program!"); Console.Write("Enter the radius of the sun: "); i

我最近开始用C#编写代码,所以我现在只是在学习基础知识。我曾尝试通过谷歌搜索这个问题,但在这个网站上,我找不到任何解决方案,但基本上,当我使用Console.Read()并将输入值存储到整数变量中时,我输入的值在输出时会有奇怪的不同

下面是我试图运行的代码块:

        Console.WriteLine("Welcome To The Program!");
        Console.Write("Enter the radius of the sun: ");
        input = Console.Read();
        Console.WriteLine(input);
        Console.ReadKey();
输入是一种int类型,当我输入5时,它将输出53。如果我输入0,它将输出48


有人能解释一下为什么会发生这种情况吗?我知道有一种解析输入的方法,首先将其作为字符串输入,然后将其解析为整数,但对于较大的代码段来说,这将花费太长的时间。

将其放入
Convert.ToInt32
中,因为您将行作为字符串值读取,如下所示:


input=Convert.ToInt32(Console.Read())

将其放入
Convert.ToInt32
中,因为您将该行作为字符串值读取,如下所示:


input=Convert.ToInt32(Console.Read())

对于记录,此操作不起作用的原因是Console.Read返回控制台中输入的第一个字符的ASCII整数表示形式。“5”在屏幕上回响的原因是:

从控制台的输入流开始读取。 流中的第一个字符是“5”。 “5”的ASCII值为53。 “输入”的值为53

这将解决您的问题:

input = int.Parse(Console.ReadLine());
您还可以更好地使用此选项:

int number;
if(!int.TryParse(Console.ReadLine(), out number)){
  Console.WriteLine("Input was not an integer.");
  return;
}
Console.WriteLine(number);

对于记录,这不起作用的原因是Console.Read返回在控制台中输入的第一个字符的ASCII整数表示形式。“5”在屏幕上回响的原因是:

从控制台的输入流开始读取。 流中的第一个字符是“5”。 “5”的ASCII值为53。 “输入”的值为53

这将解决您的问题:

input = int.Parse(Console.ReadLine());
您还可以更好地使用此选项:

int number;
if(!int.TryParse(Console.ReadLine(), out number)){
  Console.WriteLine("Input was not an integer.");
  return;
}
Console.WriteLine(number);

您正在接收有关字符的ASCII值。为了得到你想要的,你必须接受一个字符串,然后解析它。这将花费比您想象的更少的时间。

您正在接收相关字符的ASCII值。为了得到你想要的,你必须接受一个字符串,然后解析它。这将花费比您想象的更少的时间。

如果您一次只想读取一个字符,则可以使用以下方法:

int input = int.Parse(((char)Console.Read()).ToString());

这将获取代码点的字符,然后在解析之前将其转换为字符串。但是,如果您将有多个字符,或者输入可能不是数字,则应查看响应。

如果您一次只想读取一个字符,则可以使用以下方法:

int input = int.Parse(((char)Console.Read()).ToString());

这将获取代码点的字符,然后在解析之前将其转换为字符串。但是,如果您将有多个字符,或者输入可能不是数字,那么您应该查看响应。

我的意思是没有其他方法。是的,我尝试过,但不幸的是,它给出了相同的答案。我建议这是更好的转换实践。尝试阅读。我的意思是没有其他方法。是的,我尝试过,但不幸的是,它给了我相同的答案。我建议这是更好的转换练习。尝试读取.Convert.ToInt32调用TryParse。它会将您从方法bro.Convert.ToInt32 invoke TryParse中解救出来。这会让你免于那种方法,兄弟。