我正在学习C#(VS 2012 Professional),在下面的示例中,即使Console.ReadLine()
方法是代码块中的最后一条指令,控制台窗口也不会保持打开状态:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace testing
{
class Program
{
static void Main(string[] args)
{
// fahrenheit conversion example
Console.Write("Enter temp in fahrenheit: ");
double fahrenheit = Console.Read();
double celsius = (fahrenheit - 32.0) * (5.0 / 9.0);
Console.WriteLine("Celsius is: " + celsius);
Console.ReadLine();
}
}
}
在Console.ReadLine()
方法的实现中是否存在复杂性,或者代码块中可能存在冲突的代码?
答案 0 :(得分:8)
您可能键入fahrenheit
变量的值,然后按Return(回车)。
这将获得Read调用中的值和ReadLine中的Enter。
更改为
Console.Write("Enter temp in fahrenheit: ");
double fahrenheit;
string userInput = Console.ReadLine();
if(double.TryParse(userInput, out fahrenheit))
{
double celsius = (fahrenheit - 32.0) * (5.0 / 9.0);
Console.WriteLine("Celsius is: " + celsius);
}
else
{
Console.WriteLine("Non a valid double value");
}
Console.ReadLine();
此外,Console.ReadLine与Console.Read不同,返回一个字符串,因此您需要在尝试使用它之前解析并转换为double。这可以通过double.TryParse来完成,当用户没有输入有效的数字双精度时,它将返回false
Console.Read的另一个缺点是你需要在循环中调用它来读取用户键入的所有字符,直到Enter。如果您尝试转换12.8,则需要使用与Console.Read完全不同的代码。 (查看上面链接中的MSDN示例)
答案 1 :(得分:0)
Console.Read()
“从标准输入流中读取下一个字符”。这包括Enter键。它返回一个整数,因此对于Enter,将返回13。
Console.ReadLine()
“从标准输入流中读取下一行字符”。这包括Enter键(换行符),但该字符将被丢弃。它返回一个字符串。
Console.ReadKey()
“获取用户按下的下一个字符或功能键”。也就是说,它会忽略输入流中剩余的内容并等待下一次按键。
因此,您可以在循环中使用Read()
来读取单个字符,在读取某个字符时停止,或使用ReadLine()
读取,然后解析用户输入的完整行。但在同一代码中同时使用Read()
和ReadLine()
可能会有问题。
答案 2 :(得分:0)
只需按Ctrl + F5即可运行代码。