在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
答案 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);
}
}