Все, что вам действительно нужно сделать, - это просмотреть все ваши оценки и вывести информацию об ученике (из обоих массивов) для любого индекса, где оценка меньше 40. Проблема с вашим кодом выше состоит в том, что, как только вы сортируете один из массивов, они больше не синхронизируются.
Одна из первых вещей, которые я обычно делаю, когда пытаюсь получить числа от пользователя, - это создать вспомогательный метод, который выполнит некоторую проверку (используя int.TryParse
), чтобы убедиться, что они действительно вводят целое число. Этот метод принимает строку в качестве приглашения для отображения пользователю и продолжает запрашивать его до тех пор, пока он не введет действительное число:
private static int GetIntFromUser(string prompt)
{
int input;
do
{
Console.Write(prompt);
} while (!int.TryParse(Console.ReadLine(), out input));
return input;
}
С учетом этого, вот пример кода, который предложит пользователю указать, сколько учеников они хотят ввести, а затем соберет имя и оценку для каждого из них в два отдельных массива. Затем он просто использует счетчик для циклического перебора массива результатов и выводит имя студента и оценку для всех, кто набрал менее 40:
private static void Main()
{
int numStudents = GetIntFromUser("Enter the number of students: ");
int[] scores = new int[numStudents];
string[] names = new string[numStudents];
for (int i = 0; i < numStudents; i++)
{
Console.WriteLine("\nStudent #" + (i + 1));
Console.Write(" - Enter student's name: ");
names[i] = Console.ReadLine();
scores[i] = GetIntFromUser(" - Enter student's score: ");
}
Console.WriteLine("\nHere are the students who scored less than 40:");
for (int i = 0; i < numStudents; i++)
{
if (scores[i] < 40)
{
Console.WriteLine(" - " + names[i] + " scored " + scores[i]);
}
}
GetKeyFromUser("\nDone! Press any key to exit...");
}
выход
![enter image description here](https://i.stack.imgur.com/5oqmX.png)