У меня есть функция, которая должна читать файл и обнаруживать, когда файл заканчивается.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;
}
как вы ожидаете, что он обнаружит, закончился ли файл? Вы выполняете окончательную серию вызовов fscanf на основе 'incan-> ac-1', затем еще один, затем вызывайте feof. Как это найти конец файла? Он скажет вам, если вы в конце, но он не будет каким-то образом читать данные до тех пор, пока не будет, не так ли? Может быть, я что-то упустил. – xaxxon
Почему бы вам не дать нам наименьший входной файл, который воспроизводит этот файл и какой вывод вы получите из этой программы на этом выходе, а что вы ожидаете? – xaxxon
У вас есть '' \ n'' на последней строке? Таким образом, вы должны иметь последнюю строку как пустую строку. В противном случае 'fscanf (" ... \ n ");' не будет соответствующим образом помещать значения в переменные. – Rohan