2

我在标题中收到错误,代码有什么问题?我认为这是一个语法错误,但我不确定,因为我没有太多关于错误实际含义的信息。

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)
    {

        Console.WriteLine("Please Input Number of Rows you want to make in your pyrimid: ");

        int num = int.Parse(Console.Read()); // error here

        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

    }
}
}

编辑:

只是为了澄清,我希望代码只是从用户那里获取一个数字,然后打印用户输入的数字。

4

4 回答 4

8

int.Parse接受一个字符串作为参数。用于Console.ReadLine()从用户获取字符串,然后将其传递给int.Parse

int num = int.Parse(Console.ReadLine());

请注意,FormatException如果用户输入的内容无法识别为int. 如果您不确定用户是否会输入一个好的数字(我总是不这样做),请使用TryParse. 下面给出示例

int value;

if (int.TryParse(Console.ReadLine(), out value))
    Console.WriteLine("parsed number as: {0}", value);
else
    Console.WriteLine("incorrect number format");
于 2013-03-29T13:01:42.670 回答
1

问题是 Console.Read() 返回一个 int,但 int.Parse 需要一个字符串。只需将其更改为

int num =Console.Read();
于 2013-03-29T13:01:56.673 回答
1

Console.Read()和 ASCII

这是因为Console.Read()实际上返回 and 而int不是 a string。它返回所按下键的 ASCII 码,您需要将其转换为字符,然后转换为字符串,然后解析它。

var val = int.Parse(((char)Console.Read()).ToString());

请注意,它Console.Read()不会以您认为的格式返回整数,而是实际输出的值,0因为它们是键码而不是您按下的字符。96070

请参阅此处的 ASCII 表

Console.ReadLine()

另一种可能更好的解决方案是使用Console.ReadLine()which 返回string

var val = int.Parse(Console.ReadLine());

警告

使用时应始终小心,int.Parse()因为如果提供的字符串不是数字,它将引发异常。更好的选择是使用int.TryParse()which 你给出一个out参数并返回解析是否成功。

string text = Console.ReadLine();
int val;
if (int.TryParse(text, out val))
{
    // It is a number
}
{
    // It is not a number
}
于 2013-03-29T13:02:58.293 回答
0

你得到那个的原因是因为 Console.Read 返回一个 int

http://msdn.microsoft.com/en-us/library/system.console.read.aspx

而且它不能解析一个int,它只能解析字符串。

您可能想要 Console.ReadLine - 它返回一个字符串。

于 2013-03-29T13:02:21.757 回答