Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从控制台读取用户输入?_C#_.net_Console - Fatal编程技术网

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

C# 如何从控制台读取用户输入?,c#,.net,console,C#,.net,Console,我想从用户那里得到一个数字,然后用π乘以这个数字。下面是我的尝试。但是a包含胡言乱语。例如,如果我插入22,则a包含50。我做错了什么?我没有收到任何编译器错误 double a,b; a = Console.Read(); b = a * Math.PI; Console.WriteLine(b); 请注意,如果用户输入了无法解析为double的内容,将引发异常 编辑: 在我的回答中,它不适用于您的原因是您从用户那里获得了字符串格式的输入,并试图将其直接放入双精度格式。你不能那样做。必须首先

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

double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);
请注意,如果用户输入了无法解析为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帮助我完善我的答案

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()。因此,如果您写入
25
+Enter,它将返回
2
的unicode值,即
50
。如果重新执行第二个
Console.Read()
,它将立即返回
53
(unicode值为
5
)。第三个和第四个
Console.Read()
将返回行尾/回车字符。第五个将等待新的输入

Console.ReadLine()
读取
字符串
(因此需要将字符串更改为
双精度



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

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

a = Console.Read();
这将仅从控制台读取一个字符

您可以将程序更改为此。要使其更健壮,请接受1个以上的字符输入,并验证该输入实际上是一个数字:

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.
}

您缺少一个分号:
double b=a*Math.PI

我认为有一些编译器错误

double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);
  • 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);
    

    • 将来某个时候。NET4.6

      //for Double
      double inputValues = double.Parse(Console.ReadLine());
      
      //for Int
      int inputValues = int.Parse(Console.ReadLine());
      
      Console.Read()获取一个字符并返回该字符的ascii值。因此,如果要获取用户输入的符号而不是其ascii值(例如:如果输入为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类型。

      为什么您不能?这是因为编译器错误,还是在运行它时它没有按预期工作?尽管我已经看到它至少有一个错误,但在堆栈溢出时,您必须准确地告诉我们您预期会发生什么,以及在编写问题时实际发生了什么。请阅读错误消息——由于
      Console.Read()
      a
      的结果赋值中的类型不匹配,它将无法编译。然后,如果仍然有问题,请在帖子中包含错误消息。@pst考虑到Console.Read()返回int,没有类型不匹配!你能学到的最好的技能之一就是如何提出一个好问题。在这种情况下,出了什么问题?有错误消息吗?那是什么?你是怎么修的?你还不明白什么?密切相关的帖子。如果你能使用
      TryParse()
      ,试一试catch会怎么样?
      TryParse()
      更快。看,我必须同意这里的@abatishchev。我更喜欢特里帕斯路线。我不认为编写非法输入的用户是应该被捕获的例外。基本上,我不认为异常应该是正常程序流程的一部分。感谢您指出这一点-我将更改我的答案以反映它。@abatishchev,因为它应该是
      “Sonuç{0}”
      (就像在问题的第一个“版本”中一样),但我太懒了,无法编写它。我通常尝试控制WriteLine的格式,而不是简单地
      WriteLine(myDouble)
      实际上,
      Console.Read()
      返回一个
      int
      。这由您提供的MSDN链接进行备份;)@Øyvind:对。但是除了
      Convert.ToChar(x)
      (char)x
      之外,您不能使用它,即不能直接使用。我更新了我的答案来澄清这一点,但我不确定为什么它首先不返回char。至少在我看来更符合逻辑。
      //for Double
      double inputValues = double.Parse(Console.ReadLine());
      
      //for Int
      int inputValues = int.Parse(Console.ReadLine());
      
      int userInput = int.parse(Console.ReadLine());