Как указано в комментариях, эта строка
if (mark != 999 && (mark < 0 || mark > 100))
оценивается как истинная только тогда, когда вы вводите отметку меньше 0 или больше 100, что противоречит вашим требованиям.Таким образом, условие должно быть записано как
if (mark >= 0 && mark <= 100)
И для циклов while, точка решает , когда прервать или продолжить.Хорошей практикой является проверка условий в начале , если выполняются определенные условия, такие как ввод пользователем 999 или недопустимая отметка, немедленно прервите или продолжите, не идя дальше.
Так что для внутреннего цикла while , вы можете написать это так:
while (true)
{
Console.Write("Please enter a mark for the student or enter 999 to quit: ");
mark = int.Parse(Console.ReadLine());
if (mark == 999) //get signal for exit
{
break; //go no further, stop the loop
}
if (mark < 0 || mark > 100) //invalid inputs
{
Console.WriteLine("Invalid input value.");
Console.Write("Please enter a mark for the student or enter 999 to quit: ");
continue; //go no further, continue the loop, let user input again
}
//handle valid inputs
sum += mark;
count++;
if (mark < lowMark)
{
lowMark = mark;
}
if (mark > highMark)
{
highMark = mark;
}
}