1

我正在学习 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()或者可能是代码块中的一段冲突代码?

4

3 回答 3

8

可能您键入fahrenheit变量的值,然后按 Return (Enter)。这将获得 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 示例)

于 2013-07-20T12:35:59.347 回答
0

Console.Read()“从标准输入流中读取下一个字符”。这包括 Enter 键。它返回一个整数,因此对于 Enter,将返回 13。

Console.ReadLine()“从标准输入流中读取下一行字符”。这包括 Enter 键(换行符),但该字符被丢弃。它返回一个字符串。

Console.ReadKey()“获取用户按下的下一个字符或功能键”。也就是说,它忽略输入流中剩下的任何内容并等待下一次按键。

因此,您可以Read()在循环中使用来读取单个字符,在读取某个字符时停止,或者用于ReadLine()读取并解析用户输入的完整行。但是在同一代码中同时使用两者可能会出现Read()问题。ReadLine()

于 2013-07-20T13:12:00.113 回答
0

只需按 Ctrl+F5 即可运行代码。

于 2014-03-25T21:25:03.630 回答