如何从控制台读取用户输入?

时间:2011-09-02 07:51:02

标签: c# .net console

我想从用户那里得到一个数字,然后将该数字乘以Pi。我对此的尝试如下。但是a包含了胡言乱语。例如,如果我插入22,则a包含50。我究竟做错了什么?我没有任何编译器错误。

double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);

9 个答案:

答案 0 :(得分:60)

我不确定你的问题是什么(因为你没有告诉我们),但我猜是

a = Console.Read();

这只会从您的控制台中读取一个字符。

您可以将程序更改为此。为了使其更健壮,接受多于1个char输入,并验证输入实际上是一个数字:

double a, b;
Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
if (double.TryParse(Console.ReadLine(), out a)) {
  b = a * Math.PI;
  Console.WriteLine("Sonuç " + b); 
} else {
  //user gave an illegal input. Handle it here.
}

答案 1 :(得分:13)

a = double.Parse(Console.ReadLine());

请注意,如果用户输入无法解析为double的内容,则会抛出异常。

编辑:

为了扩展我的答案,它不适合你的原因是你以字符串格式从用户那里获得输入,并尝试将其直接放入双精度型。你不能这样做。您必须先从字符串中提取double值。

如果您想执行某种错误检查,只需执行以下操作:

if ( double.TryParse(Console.ReadLine(), out a) ) {
  Console.Writeline("Sonuç "+ a * Math.PI;); 
}
else {
  Console.WriteLine("Invalid number entered. Please enter number in format: #.#");
}

感谢Öyvind和abatischev帮助我完善答案。

答案 2 :(得分:6)

string input = Console.ReadLine();
double d;
if (!Double.TryParse(input, out d))
    Console.WriteLine("Wrong input");
double r = d * Math.Pi;
Console.WriteLine(r);

您面临的输入/输出不同的主要原因是Console.Read()返回字符代码,而不是您输入的数字!了解如何使用MSDN

答案 3 :(得分:2)

我认为有一些编译器错误。

  • Writeline应该是WriteLine(大写'L')
  • 在一行

    处缺少分号
        double a, b;
        Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
        a = double.Parse(Console.ReadLine());
        b = a * Math.PI; // Missing colon!
        Console.WriteLine("Sonuç " + b);
    

答案 4 :(得分:1)

string str = Console.ReadLine(); //Reads a character from console
double a = double.Parse(str); //Converts str into the type double
double b = a * Math.PI; // Multiplies by PI
Console.WriteLine("{0}", b); // Writes the number to console

Console.Read()从一个时间的控制台A单个字符中读取一个字符串(但在继续之前等待输入。通常在while周期中使用它)。因此,如果您编写25 + Enter,它将返回2的{​​{1}}的unicode值50。如果您重做第二个Console.Read(),它将立即返回53(unicode值为5)。第三个和第四个Console.Read()将返回行/运输字符的结尾。五分之一将等待新的输入。

Console.ReadLine()读取string(因此您需要将字符串更改为double

答案 5 :(得分:1)

将来某个时候.NET4.6

//for Double
double inputValues = double.Parse(Console.ReadLine());

//for Int
int inputValues = int.Parse(Console.ReadLine());

答案 6 :(得分:0)

你错过了一个分号:double b = a * Math.PI;

答案 7 :(得分:0)

        double a,b;
        Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
        try
        {
            a = Convert.ToDouble(Console.ReadLine());
            b = a * Math.PI;
            Console.WriteLine("Sonuç " + b); 
        }
        catch (Exception)
        {
            Console.WriteLine("dönüştürme hatası");
            throw;
        }

答案 8 :(得分:0)

Console.Read()接受一个字符并返回该字符的ascii值。因此,如果要使用用户输入的符号而不是其ascii值(例如:if输入为5,然后符号= 5,ASCII值为53),则必须使用 int.parse()对其进行解析,但由于返回值 Console.Read( )已经是int类型。因此,您可以使用 Console.ReadLine()而不是Console.Read()来完成工作,如下所示。

int userInput = int.parse(Console.ReadLine());

此处, Console.ReadLine()的输出将是一个包含数字的字符串,例如“ 53”。将其传递给 int.Parse() >我们可以将其转换为int类型。