Ответ на заголовок вашего вопроса в том, что это почти невозможно. Представьте, что вы получаете случайное число и решаете, какую из двух строк формата вы собираетесь передать в fscanf. Вам нужен предварительный прогноз, получит ли fscanf значение eof, даже если вы даже не знаете, каким будет случайное число?
Ответ на основную часть вашего вопроса более или менее соответствует тому, что написал Андреас Бринк. У меня такое чувство, что вам может понадобиться что-то более похожее на это:
for (;;)
{
// .....
eofReached = (fscanf(..) == EOF);
// .....
if (eofReached && otherConditionsMet) break;
// .....
}