Я думаю, что проблема с этим кодом заключается в том, что когда вы читаете с помощью% [^\n\r] s, на самом деле, вы читаете до достижения '\n' или '\r', но вы не читаете '\n' или '\r'. Таким образом, вам нужно получить этого персонажа, прежде чем читать с fscanf снова в цикле. Сделайте что-нибудь подобное:
do{
fscanf(f, "%[^\n\r]s", cLine) != EOF
/* Do something here */
}while(fgetc(file) != EOF)