Console.ReadLine()没有在C#中保持控制台打开

时间:2013-07-20 12:32:53

标签: c# console.readline

我正在学习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()方法的实现中是否存在复杂性,或者代码块中可能存在冲突的代码?

3 个答案:

答案 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.ReadLineConsole.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即可运行代码。