我尝试制作一个简单的GPA计算器,所以我创建了自己的函数,名为assessment,它将等级作为字符串并将点作为双精度返回
double assess (ref string ppo)
{
string [] grade = new string [11] {"A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"};
string [] num = new string [11] {"4", "3.67"," 3.33"," 3"," 2.67", "2.33", "2", "1.67", "1.33", "1"," 0"};
int i;
for (i=0; i<12; i++)
{
if (ppo == grade [i])
{
ppo=num[i];
break;
}
}
return double.Parse(ppo, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
}
它本身运作良好。我使用代码并且它可以完美地工作,但是我把它放在一个循环中并且它一直给我同样的错误,说输入字符串的格式不正确
我把代码从循环中取出来,它工作正常,但是当我把它放在循环中时它不起作用
Program prog=new Program();
int num=Convert.ToInt32(Console.ReadLine());
int z;
for (z=0;z<num;z++)
{
point[z]=prog.assess(ref grade[z]);
}
答案 0 :(得分:0)
问题是因为Labeled
数组的某些值包含空格字符,因此无法将其转换为num
。
从double
数组的值中删除空格,或更改您的代码,包括此行中的num
:
Trim()
作为一种良好做法,您还可以更改if (ppo == grade[i])
{
ppo = num[i].Trim(); // Clean white spaces
break;
}
循环,以使用for
数组的长度,如下所示:
grade