-1

我正在学习使用 C# 编码,因为我喜欢该语言所提供的功能,并且在我正在做的学习练习中遇到了一个问题。

练习的要点是学习声明变量、使用它们并显示它们。

我的代码有效,如下所示:

//Declare variables
        float originalFahrenheit;
        float calculatedFahrenheit;
        float calculatedCelsius;

        //Asks for fahrenheit
        Console.Write("Enter temperature in fahrenheit: ");
        originalFahrenheit = float.Parse(Console.ReadLine());

        //Calculations
        calculatedCelsius = ((originalFahrenheit - 32) / 9) * 5;
        calculatedFahrenheit = ((calculatedCelsius * 9) / 5) + 32;

        //Display calculations
        Console.WriteLine(originalFahrenheit + " degrees fahrenheit is " + calculatedCelsius + " degrees celsius");
        Console.WriteLine(calculatedCelsius + " degrees celsius is " + calculatedFahrenheit + " degrees fahrenheit");

        Console.ReadKey();

当用户输入“70”华氏度时,答案会正确显示。

输入华氏温度:70

70华氏度是21.11111摄氏度

21.11111 摄氏度是 70 华氏度

现在,我尝试使用'casting'只是因为编译了代码但结果不同:

这是代码:

        //Asks for fahrenheit
        Console.Write("Enter temperature in fahrenheit: ");
        originalFahrenheit = (float)Console.Read;

这是我得到的答案:

输入华氏温度:70

55华氏度是12.77778摄氏度

12.77778 摄氏度是 55 华氏度

我想知道为什么会这样。对于这种情况,强制转换是没有好处还是我的语法不好?


请再问一个问题。改变时:

originalFahrenheit = (float)Console.Read

originalFahrenheit = (float)Console.Readline()

我得到一个例外。请在下面的图片中看到它:

使用强制转换将 Console.Read 更改为 Console.ReadLine

它基本上告诉我我无法将类型“字符串”转换为“浮点数”。

改变时:

originalFahrenheit = float.Parse(Console.ReadLine());

originalFahrenheit = float.Parse(Console.Read());

我得到另一个例外。请看下面:

使用 Parse 将“Console.ReadLine”更改为“Console.Read”

异常告诉我我无法将类型“int”转换为“string”

为什么会发生?'ReadLine' 和 'Read' 如何在代码中发挥作用?

4

1 回答 1

0

C# 不允许从 astring转换为float. 此类操作必须使用Float.Parse().

您的代码读取 55 度的原因是因为Console.Read()从输入流中读取下一个字符。该字符被简单地编码为整数,因此允许在此处进行转换并且您不会遇到异常。此外,如果您检查 ASCII 表 - 例如这里http://www.asciitable.com/ - 您会看到 7(您的第一个字符)被编码为 55。

你的下一个片段抛出异常的原因Console.ReadLine()是因为该函数返回一个string(输入流中的所有字符,直到下一个换行符)。在这种情况下,正如我们之前建立的,C# 不允许强制转换。

Float.Parse(Console.Read())不完全有意义,因为Float.Parse需要一个字符串,但是 - 如上所述 -Console.Read()返回一个int


有关更多信息,请查看 MSDN 中的这些参考: https ://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx ,https ://msdn.microsoft .com/en-us/library/system.console.readline(v=vs.110).aspx

于 2017-05-29T22:11:34.170 回答