Ваш логин программы c имеет недостатки. Так. У вас есть al oop, который продолжает цикл и вызывает метод. В этом методе GetGradePoint
вы запрашиваете ввод оценок и затем читаете ввод, используя Console.ReadLine()
.
Это нормально. Вопрос приходит после. Вы снова ждете ввода от пользователя, и если он вводит что-либо, кроме пустой строки, программа добавит первое значение оценки ввода, а затем l oop обратно, так как LastGrade
все еще ложно.
Это означает, что программа запускается с начала l oop, что означает, что она затем снова вызовет метод GetGradePoint
, поэтому она снова запрашивает ввод. Также, если вы затем введете пустую строку, оценка, введенная пользователем, не будет добавлена в список GradeList
.
Вам необходимо go через вашу программу, поскольку проблема, как я уже сказал, заключается в логах c вашей программы. Я подозреваю, что другая проблема, связанная с неправильным GPA, также исправится.
Подсказки по коду:
Вместо 1000 операторов if, поскольку вы принимаете только один символ, который можете использовать else if
для остальных утверждений. Хотя это не имеет большого значения, так как вы возвращаете значение. IE:
if(condition)
{
}
else if(other condition)
{
}
Ваше время l oop принимает логическое значение в качестве условия, которое обеспечивает ==
, но вместо этого вы можете использовать переменную LastGrade
в качестве условия для l oop IE:
while(!LastPass)
{
}
Что касается получения ввода, я бы переписал его примерно как
//Remove the line in GetGradePoint if you're gonna put it here
Console.WriteLine("Enter your grades");
while(condition)
{
string input = Console.ReadLine();
if(input != "")
{
var grade = GetGradePoint(input);
GradeList.Add(grade);
}
else LastGrade = true;
}
//Rest of code to calculate GPA
Это грубый псевдо-c# код. Что касается принятия как строчных, так и прописных букв: вы можете использовать .ToUpper()
на входе, чтобы обеспечить ввод заглавной буквы, даже если пользователь вводит строчную букву.