Console.Read()不捕获正确的信息

时间:2013-03-29 12:09:11

标签: c#

我正在运行一个非常简单的程序,它只是提示用户输入一个数字,现在只需在屏幕上打印即可。但由于某些我不知道的原因,我输入的数字似乎增加了48号。

例如: 我输入2 它推出50

我是否有某种基本法律监督,或者我在我的代码中犯了某种错误

我是初学者,如果你没有注意到

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int Num;
            Console.WriteLine("Please Input Number of Rows you want to make in your pyrimid: ");
            Num = Console.Read();

            Console.WriteLine(Num);// Just to check if it is getting the right number
            Console.Read();//This is Here just so the console window doesn't close when the program runs

        }
    }
}

编辑:讨厌是一个麻烦但现在得到num = int.Parse(Console.Read());的这个错误因为'int.Parse(string)'的最佳重载方法匹配有一些无效的参数。这是否意味着我需要一个重载方法?

3 个答案:

答案 0 :(得分:5)

Console.Read会返回char,因此当您将其转换为int时,您将获得2 50 的ASCII码!你应该解析为int而不是(隐式)转换它:

Num = int.Parse(Console.Read());

注意:

  1. 如果输入可以是非数字值,请使用int.TryParse
  2. C#中局部变量的约定是camelCase,因此将Num更改为num

答案 1 :(得分:1)

Console.Read返回字符代码,而不是字符本身。

char num = (char)Console.Read();
Console.WriteLine(int.Parse(num.ToString()));

此代码并不理想,但它显示了正在发生的事情。由于您希望输入数字,因此您也可以使用

int num = Console.Read() - 48;

答案 2 :(得分:0)

Console.Read读取标准输入的读取字节。

2的ASCII值为50

您需要解析从控制台读取的值

Num = Int32.Parse(Console.Read()); // or Num = int.Parse(Console.Read());