向用户询问5个数字,然后使用循环将总数加在一起

时间:2014-09-26 14:34:15

标签: c#

using System;
 class SumDoubles
 {
    static void Main()
    {   
        //Declare variables
        double DblSumTotal = 0;
        double LIMIT = 0;


        //Ask user to input 5 numbers to be added
        Console.Clear();
        Console.WriteLine("Enter 5 numbers to be added together.");
        do 
        {
            DblSumTotal = DblSumTotal + (Convert.ToDouble(Console.ReadLine()));
            LIMIT = LIMIT + 1;
        } while (LIMIT < 6);

        //Output total
        Console.WriteLine("The total sum of the 5 numbers is " + DblSumTotal);
        Console.ReadLine();
    }   
}

这是我到目前为止的代码。它会编译,但在尝试运行时收到错误:

  

未处理的异常:输入字符串的格式不正确。在System.Dumber.ParseDouble(字符串值,NumberStyles选项,NumberFormat信息numfmt)处于SumDoubles.Main()&#34;的System.Double.Parse(String s,IFormatProvider提供程序);

我对编码很陌生,我似乎无法绕过循环。请帮忙!

4 个答案:

答案 0 :(得分:2)

Convert.ToDouble会抛出您在输入错误时看到的异常,例如一个空字符串。您可能要么使用try catch块来处理异常,要么可以使用double.TryParse(),它不会在输入错误时抛出。

double output;
bool isValid = double.TryParse("10", out output); // isValid is true and output contains 10
isValid = double.TryParse("lsdf", out output); // isValid is false

我还注意到此代码中有“off by 1”错误

Console.WriteLine("Enter 5 numbers to be added together.");
do 
{
    DblSumTotal = DblSumTotal + (Convert.ToDouble(Console.ReadLine()));
    LIMIT = LIMIT + 1;
} while (LIMIT < 6);

你的循环有6次迭代(LIMIT = 0,1,2,3,4,5),你期待5个数字。您可能正在按下额外的“输入”,这会导致空字符串""传递给Convert.ToDouble,从而导致异常。将while (limit < 6)更改为while (limit < 5)

答案 1 :(得分:1)

你的程序工作得很好,除了它读取六个数字而不是五个。

我认为你的问题与xeraphim所说的有关,你试图同时输入所有数字。

如果输入“4”ENTER“5”ENTER“10”ENTER等等,它会正常工作。 =)

PS:请记住“。”之间存在差异。和“,”。

答案 2 :(得分:0)

Sasse和Tejas Sharma都有一个观点。完整的代码可能看起来像这样:

 using System;
 class SumDoubles
 {
    static void Main()
    {   
        //Declare variables
        double DblSumTotal = 0;
        double LIMIT = 0;


        //Ask user to input 5 numbers to be added
        Console.Clear();
        Console.WriteLine("Enter 5 numbers to be added together.");
        do 
        {
            double d;
            if (!double.TryParse(Console.ReadLine(), out d)) {
                Console.WriteLine("Format error!!!");
            } else {
                DblSumTotal = DblSumTotal + d;
                LIMIT = LIMIT + 1;
            }

        } while (LIMIT < 5);

        //Output total
        Console.WriteLine("The total sum of the 5 numbers is " + DblSumTotal);
        Console.ReadLine();
    }   
}

` 另外,如果你像我一样使用非英语语言环境(我有捷克语系统),那么可以解析为double的字符串看起来有点不同(即捷克语&#34; 1,2&#34; vs English& #34; 1.2&#34)

答案 3 :(得分:-2)

我认为这可以通过使用for循环来简化。

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

        namespace ConsoleApplication2
        {
            class Program
            {
                static void Main(string[] args)
                {
                    int read;
                    int sum = 0;
                    Console.WriteLine("Enter 5 numbers: "); 
                    for (int i = 0; i < 5; i++)
                    {
                       read = int.Parse(Console.ReadLine());
                       sum = sum + read;
                    }

                    Console.WriteLine("The total sum of the 5 numbers are " + sum);
                }
            }
        }

或者如果您仍然想要使用while循环,那就很容易了。

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

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int read;
            int sum = 0;
            int i = 0;
            Console.WriteLine("Enter 5 numbers: "); 
            while(i<5)
            {
               read = int.Parse(Console.ReadLine());
               sum = sum + read;
               i++;
            }

            Console.WriteLine("The total sum of the 5 numbers are " + sum);
        }
    }
}