これについては以前に別の質問をしましたが、問題については的外れだったので、まったく別の質問をしているので、新しい質問を作成しました。
テキストファイルの特定の行を読み取る関数があります(ac変数で指定)。行の読み取りを実行し、それがファイルの最後の行であるかどうかを確認します。その場合、値を増やします。
問題は、ファイルの実際の末尾ではない場合でも、値がインクリメントされることです。私は 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 は値を正しく割り当てます。2 行目で、feof は true を返し、terminated がインクリメントされます。feof は 3 行目で再び true を返し、インクリメントは 2 回目に終了します。