Я задал другой вопрос об этом ранее, но я был вне базы относительно проблемы, поэтому я создал новый вопрос, поскольку задаю совершенно другой вопрос.feof обнаружение ложного конца файла
У меня есть функция, которая читает данную строку в текстовом файле (задается переменной переменного тока). Он выполняет чтение строки, а затем проверяет, была ли последняя строка в файле. Если это так, он увеличивает значение.
Проблема в том, что она увеличивала значение, даже если это не фактический конец файла. Я думаю, что я использую 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;
}
Выборочные данные по запросу, это текстовый файл, можно использовать:
1 1 30
2 2 5
3 1 1
fscanf правильно присваивает значения. Во второй строке feof возвращает true и завершается, увеличивается. feof возвращает true снова для третьей строки, а приращения завершаются второй раз.
возвращение закончена, isFinished я думаю –
Все, что я сказал на другой вопрос, по-прежнему имеет место. Просьба представить данные файла образца, то, что вы получаете как вывод, то, что вы ожидаете получить как результат, и возвращаемые значения от fscanf – xaxxon
О, странно. Да, что сказал @marabutt - если это скомпилировано, чем закончилось, это глобальная переменная где-то, и это очень не то, что вы думаете, что возвращаетесь. Или вы опечатываете его при копировании в stackoverflow. – xaxxon