Подсчет строк в файле данных
В этом фрагменте кода я пытаюсь подсчитать количество строк, содержащихся в файле. Данные разделены на семь столбцов и 421 строку. Тем не менее, общее количество выходных данных возвращается как 422, что считается более чем в одной строке. Зачем? Как я могу избежать этой проблемы?
Я знаю, что неправильно использовать инструкцию while (! Feof (inStr)), но меня явно попросили ее использовать.
int valid = 0;
[...]
while(!feof(inStr)){
fscanf(inStr," %c %f %f %f %f %f %d",&app1, &app2, &app3, &app4, &app5, &app6,&app7);
valid++;
}
printf("%d",valid);
2 ответа
Проблема в том, что вам нужно сделать feof
проверьте сразу после попытки fscanf
, но прежде чем увеличивать счетчик строк. В противном случае вы будете увеличивать его для eof
,
while(1){
fscanf(inStr," %c %f %f %f %f %f %d",&app1, &app2, &app3, &app4, &app5, &app6,&app7);
if (feof(inStr)) break;
valid++;
}
printf("%d",valid);
Конечно, вы также можете сделать, как предложил Мартин Джеймс, и вычесть одно из результата.
Не зацикливаться while (!feof(...))
, он не будет работать так, как вы ожидаете, поскольку флаг EOF не устанавливается до тех пор, пока вы не попытаетесь прочитать из-за конца файла. Вместо этого используйте, например, while (fscanf(...) == 7)
(в вашем конкретном случае).
Проблема с использованием while (!feof(...))
в том, что он будет повторяться один раз для многих, и это именно та проблема, которая у вас есть