输入数字或Q退出

时间:2012-11-19 15:54:54

标签: c#

大家好,我已经遇到了一些我已经设置的任务的问题

任务的第一部分是输出具有以下规则的价格表:

最高50的价格是每个5英镑。在51到80之间,价格为每个4英镑,而在81到100之间,价格是每个2.50英镑。 使用循环结构和选择语句(如果......等),您的程序应该输出小部件的小部件价格图表,其中包含10到100的倍数。

我已经做到了这一点,但是任务的第二部分让我难过 在表输出后输入多个小部件。然后,您应该计算成本并输出该值。如果用户输入“q”或“Q”,程序应该终止。

这是完整的代码

using System;
namespace w5Task3
{
class Program
    { public static void Main ( string[] args )
            {

            double PriceEach1 = 5;
            double PriceEach2 = 4;
            double PriceEach3 = 2.50;
            double Quantity = 10;
            int UserOrder=0;

            Console.WriteLine("\n\nBelow is the price chart:\n\n");
            Console.WriteLine("WidgetQuantity\t\t\tPrice\n");
            while (Quantity <=100)

                {   

                    double Price1 = PriceEach1*Quantity;
                    double Price2 = PriceEach2*Quantity;
                    double Price3 = PriceEach3*Quantity;


                        if (Quantity <=50)      
                    {
                        Console.WriteLine("\t{0}\t\t\t{1:C}", Quantity, Price1);
                    }


                        if(Quantity >=51 && Quantity <=80)      
                    {
                        Console.WriteLine("\t{0}\t\t\t{1:C}", Quantity, Price2);
                    }


                        if (Quantity >80 && Quantity <=100)
                    {
                        Console.WriteLine ("\t{0}\t\t\t{1:C}",Quantity, Price3);                        
                    }
                Quantity +=10;
                }


            while (UserOrder >=0)
                {
                    try
                        {
                        Console.WriteLine("Enter the amount of widgets you would like to purchase or press q to quit");
                        string temp = Console.ReadLine();
                        if (temp =="q") break;
                        if (temp =="Q") break;

                        int.TryParse(temp, out UserOrder);

                        double UserPrice;

                        if (UserOrder <=50)
                            {
                                UserPrice = UserOrder*5;
                                Console.WriteLine("The price is {0:C}",UserPrice);
                            }

                        if (UserOrder >=51 && UserOrder <=80)
                            {
                                UserPrice = UserOrder*4;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }

                        if (UserOrder >80)
                            {
                                UserPrice = UserOrder*2.5;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }


                        }
                            catch(Exception)
                                {
                                    Console.WriteLine("You have entered an incorrect value. Please enter a number or press q to quit");
                                }
                }



            }
    }

我遇到问题的部分是:

                while (UserOrder >=0)
                {
                    try
                        {
                        Console.WriteLine("Enter the amount of widgets you would like to purchase or press q to quit");
                        string temp = Console.ReadLine();
                        if (temp =="q") break;
                        if (temp =="Q") break;

                        int.TryParse(temp, out UserOrder);

                        double UserPrice;

                        if (UserOrder <=50)
                            {
                                UserPrice = UserOrder*5;
                                Console.WriteLine("The price is {0:C}",UserPrice);
                            }

                        if (UserOrder >=51 && UserOrder <=80)
                            {
                                UserPrice = UserOrder*4;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }

                        if (UserOrder >80)
                            {
                                UserPrice = UserOrder*2.5;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }


                        }
                            catch(Exception)
                                {
                                    Console.WriteLine("You have entered an incorrect value. Please enter a number or press q to quit");
                                }
                }
}

我可以让程序退出或执行一个UserPrice但是我需要根据订购金额更改价格。

非常感谢任何帮助或建议!

4 个答案:

答案 0 :(得分:2)

第67行和第73行的常量表达式中有换行符!

解决这些问题,一切运行良好。

答案 1 :(得分:2)

我认为您的问题是第64行和第70行的UserPrice之后的引用。

Console.WriteLine("The price is {0:C}",UserPrice");

将其删除

答案 2 :(得分:1)

最简单的方法是在计算订单部分的价格后调整UserOrder。你可以向任何一个方向前进,但它基本上看起来像:

if (HasThisQuantityRange)
{
   Total += ThisAmount * (Lower of: ThisQuantity or UserOrder);
   UserOrder -= (Lower of: ThisQuantity or UserOrder);
}

if (UserOrder > 0 && HasAdjustedQuantityRange)
{
   Total += ThisAmount * (Lower of: ThisQuantity or UserOrder);
   UserOrder -= (Lower of: ThisQuantity or UserOrder);
}

等等。

显然,这都是伪代码,你需要自己实现它,但这有望让你指向正确的方向。

答案 3 :(得分:0)

我无法理解你遇到的问题究竟是什么。您是否正在努力为订单进行正确的计算,或者Quit行为是否按照您期望的方式行事。

一般来说,我认为在你的while循环条件中使用类似瞬态变量的不良形式。当我想要一个控制台应用程序重复时,我通常会设置一个专门用于循环条件的变量,如下所示:

bool isRunning = true;
while (isRunning)
{
     ....

然后当您检查输入时

if (temp.ToUpper() == "Q")
{
     isRunning = false;
     break;
}