Вы читаете только 5 символов одновременно. Хотя это будет работать (поскольку fgets остановится в конце строки), это очень неэффективно и означает, что вы сравниваете вводимые пользователем данные с каждыми 6 символами файла, даже если содержимое этого файла не является идентификатором студента.
Если вы действительно хотите продолжить подход своей программы, когда вы получите совпадение с пользовательским вводом, вам нужно прочитать (и отбросить) оставшуюся часть строки, прежде чем продолжить изучение дальнейших строк.
Для строк, которые не совпадают, вы должны прочитать (и скопировать в новый файл) остаток строки, не сравнивая его с пользовательским вводом (поскольку вы знаете, что это не идентификатор студента).
Я подозреваю, что человек, который написал задание, ожидал, что вы прочитаете всю строку, разделите ее (ищите запятые) на различные поля и поместите информацию в свои структуры studentinfo. Затем обработайте информацию о студенте любым требуемым способом и, наконец, запишите новый файл с измененными данными.
Хотя вы можете заставить свой подход работать для удаления записи указанного студенческого идентификатора, он очень негибкий. Поиск записи или добавление записи потребует полного переписывания вашей программы. Если бы у вас был код, который мог бы считывать информацию в массив структур studentinfo и снова записывать эту информацию, любая обработка, которую вам нужно было бы выполнить, работала бы только с этими структурами, и изменения были бы намного меньше.
Итак, в псевдокоде вы хотите что-то вроде этого
allocate space for one line of the file
allocate space for an array of struct studentinfos
readinfo function:
open the student info file for reading
set the count of student records to 0
while not at eof
read in a line
split the line on commas
copy the bit before the first comma to the 'id' field of the newly allocated studentinfo record
copy the bit between first and second commas to the name field
copy the bit from the second comma to the course field
add one to the count of student records
go back to read another line
close the file
writeinfo function:
open the studentinfo file for writing
loop over the studentinfo structs in order
writeout the id, name and course strings of the current record, separated by comma and followed by new line
close the file
deletestudent function:
read a course id from the user (or read it in your main program and pass it here as a parameter)
loop over the studentinfo array
compare the id to the one of the current record
if a match
shift all records after this down one by copying them over the top of the record before
subtract one from the number of student records (since we've deleted one)
return from the function indicating found and delete
repeat for next record
if you complete looking at all records,
return from the function indicating no match found