使用C#

时间:2019-02-15 21:14:32

标签: c# parsing tryparse

在C#中,我在main()中声明了一个float数组

float[] notas = new float[8];

调用方法并在main()中通过引用传递数组

PopulateArray(ref notas);

这是方法PopulateArray(ref float [] arr1)的实现

static void PopulateArray(ref float[] arr1)
    {
        bool vakid;

        for (int i = 0; i < arr1.Length; i++)
        {
            do
            {
                do
                {
                    Console.Write($"Insira nota {i + 1}  ==>");
                    vakid = float.TryParse(Console.ReadLine(), out arr1[i]);
                    if ((arr1[i] > 20.0) || (arr1[i] < 0.0))
                    {
                        Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
                        Console.ReadKey();
                    }
                    Console.Clear();

                }while (!((arr1[i] <= 20) && (arr1[i] >= 0)));

            } while (!vakid); 
        }


    }

使用了两个循环,一个循环确保输入的值在[0,20]之间,另一个循环确保任何输入都是十进制数(浮点数)。在此实施之前,数组 notas integer ,并且一切工作正常,只允许 integers ,并且介于[ 0,20]。当我决定将数据类型更改为 float (浮点型)时,无论何时键入十进制数字(即3.0),它都不会经历外循环,就像我键入数字以外的其他字符一样,与输入字母的方式大致相同。 那么如何输入十进制数字存储在数组中呢? Ty

2 个答案:

答案 0 :(得分:3)

我提出了这种替代实现:

static void PopulateArray(float[] arr1)
{

    for (int i = 1; i <= arr1.Length; i++)
    {
        float nota;

        Console.Write($"Insira nota {i}  ==> \n");

        while(! float.TryParse(Console.ReadLine(), out nota) || nota > 20.0f || nota < 0 )
        {
           // Bad input message
            Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
        }

        arr1[i] = nota;
    }
}

请注意,您不需要按引用传递数组。这是一种引用类型,因此可以传递引用的副本,并且该方法可以对其进行处理。

答案 1 :(得分:2)

除了文化问题(.,的小数点分隔符)之外,我摆脱了以下一种do循环:

    static void PopulateArray(float[] arr1)
    {
        bool vakid;
        for (int i = 0; i < arr1.Length; i++)
        {
            do
            {
                Console.Write($"Insira nota {i + 1}  ==>");
                vakid = float.TryParse(Console.ReadLine(), out arr1[i]);
                if (vakid)
                {
                    if ((arr1[i] > 20.0) || (arr1[i] < 0.0))
                    {
                        vakid = false;
                        Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
                        Console.ReadKey();
                    }
                }
                else
                {
                    Console.Write("\n\n\t\tInvalid Entry\n\nPrima uma tecla para continuar");
                    Console.ReadKey();
                }                 
                Console.Clear();
            } while (!vakid);
        }
    }