2013-05-19 5 views
0

У меня есть функция, которая должна читать файл и обнаруживать, когда файл заканчивается.feof() обнаружение конца файла в одной строке до фактического конца

Функция в настоящее время считывает только вторую последнюю строку и заканчивается. Может кто-то пожалуйста, скажите мне, что я делаю неправильно, как я не могу видеть это сам:

int readIn(TinCan* inCan, int toggle) 
    { 
    int ii, isFinished = 0; 
    char fullName[20]; 
    sprintf(fullName, "Label_%d.txt", inCan->pid); 

    FILE* fp; 
    fp = fopen(fullName, "r"); 

    if(fp==NULL) 
     { 
     printf("Error: could not open %s\n", fullName); 
     } 

    else 
     { 
     for (ii=0; ii < ((inCan->ac)-1); ii++) 
     { 
     fscanf(fp, "%*d %*d %*d\n"); /*move through lines without scanning*/ 
     } 
     fscanf(fp,"%d %d %d", &inCan->ac, &inCan->state, &inCan->time); 
     } 

    if (feof(fp) && (toggle == 1)) 
     { 
     printf("File ended"); 
     writeLog(inCan); 
     isFinished = 1; 
     terminated++; 
     } 

    fclose(fp); 
    return finished; 
    } 
+0

как вы ожидаете, что он обнаружит, закончился ли файл? Вы выполняете окончательную серию вызовов fscanf на основе 'incan-> ac-1', затем еще один, затем вызывайте feof. Как это найти конец файла? Он скажет вам, если вы в конце, но он не будет каким-то образом читать данные до тех пор, пока не будет, не так ли? Может быть, я что-то упустил. – xaxxon

+0

Почему бы вам не дать нам наименьший входной файл, который воспроизводит этот файл и какой вывод вы получите из этой программы на этом выходе, а что вы ожидаете? – xaxxon

+0

У вас есть '' \ n'' на последней строке? Таким образом, вы должны иметь последнюю строку как пустую строку. В противном случае 'fscanf (" ... \ n ");' не будет соответствующим образом помещать значения в переменные. – Rohan

ответ

1

Я бы ожидать, что ваша программа, чтобы иметь петлю он похож на:

while (!feof(fp)) { 
... 
    fscanf(fp, "%*d %*d %*d\n"); 
... 
} 

если вы хотите определить, когда файл закончится.

+0

Это будет работать для сканирования до конца файла, но я хочу прочитать одну строку за раз, как указано значением переменного тока, а затем предпринять действия, если эта строка была последней. – Dawson

+1

Итак, как вы знаете, что это одна линия слишком рано? – xaxxon

+0

AC - это строка, которую я хочу прочитать, поэтому я пропускаю AC-1, а затем читаю правильную строку. – Dawson

Смежные вопросы