Подсчет строк в файле данных

В этом фрагменте кода я пытаюсь подсчитать количество строк, содержащихся в файле. Данные разделены на семь столбцов и 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(...)) в том, что он будет повторяться один раз для многих, и это именно та проблема, которая у вас есть

Другие вопросы по тегам