我在C#中用于简单货币转换程序的代码对我来说无法正常工作

时间:2016-09-26 19:19:24

标签: c#

该代码只是大学将欧元兑换成美元的练习,但我无法弄清楚为什么它不会起作用。我在这里包含了代码。我添加了一个额外的Console.ReadLine();我自己以便找出答案是什么。这是因为如果我只有一个,程序就会启动,然后闪存完成。答案似乎总是54.88。 任何帮助将不胜感激。

编辑:我不小心把"输入美元"而不是"输入欧元。"这不应该影响代码,只是措辞。垃圾进去,垃圾出来就是我可能发生的事情。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace euro_to_dollar
    {
    class Program
    {
        static void Main(string[] args)
        {
            float dollars, conversion_rate, euros;
            conversion_rate = 1.12f;
            Console.WriteLine("Enter in Dollars:");
            dollars = Console.Read();
            euros = dollars * conversion_rate;
            Console.WriteLine("Dollars:" + euros);
            Console.ReadLine();
            Console.ReadLine();
        }
    }
}

4 个答案:

答案 0 :(得分:1)

Console.Read只能从控制台读取一个字符。

相反,代码应使用dollars = float.Parse(Console.ReadLine());

所以完整的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace euro_to_dollar
{
    class Program
    {
        static void Main(string[] args)
        {
            float dollars, conversion_rate, euros;
            conversion_rate = 1.12f;
            Console.WriteLine("Enter in Dollars:");
            dollars = float.Parse(Console.ReadLine());
            euros = dollars * conversion_rate;
            Console.WriteLine("Dollars:" + euros);
            Console.ReadLine();
            Console.ReadLine();
        }
    }
}

编辑:每次获得54.88的原因是因为每次测试一个数字时,它都以字符1开头,用ASCII中的数字49表示。因此,1.12 * 49 = 54.88

答案 1 :(得分:0)

另一种选择是简单地使用float.TryParse()

string dollars = Console.ReadLine();
float dollarsValue;
bool isConversionSuccessful = float.TryParse(dollars, out dollarsValue);

if (isConversionSuccessful) {
    ...
} 

.TryParse()将解析dollars的值,如果成功则将其绑定到dollarsValue。该方法还返回一个bool值,因此您可以将其用于一些额外的检查。

答案 2 :(得分:0)

不要忘记将初始string输入(从Console.ReadLine())转换为货币类型表示(通常为decimal)。不要混合仅读取字符Console.Read()和读取整个字符串Console.ReadLine()

static class Program
{
    static void Main(string[] args)
    {
        // conversion_rate is a constant (at least in this program)
        const decimal conversion_rate = 1.12m;
        // decimal is a preferable type for money
        decimal dollars = 0.00m; 

        // ask until correct value is entered
        do 
        {
            Console.WriteLine("Enter in Dollars:");
        } // Console.ReadLine() - we want entire string (e.g. "5.31") not just '5' char
        while (!decimal.TryParse(Console.ReadLine(), out dollars));    

        // use formatting
        Console.WriteLine("Dollars: {0} are equal to {1} euros", 
          dollars, dollars * conversion_rate);

        // do you really want two pauses? (two Console.ReadLine())
        Console.ReadLine();
    }
}

答案 3 :(得分:-2)

与评论中的其他人一样,这是您必须使用的代码(关键是用户Console.ReadLine而不是Console.Read

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace euro_to_dollar
{
class Program
{
    static void Main(string[] args)
    {
        float dollars, conversion_rate, euros;
        conversion_rate = 1.12f;
        Console.WriteLine("Enter in Dollars:");
        dollars = float.Parse(Console.ReadLine());
        euros = dollars * conversion_rate;
        Console.WriteLine("Dollars:" + euros);
        Console.ReadLine();
        Console.ReadLine();
    }
}

}