Почему мой счетчик строк в C не работает?
Я пытаюсь прочитать текстовый файл, но перед этим я хочу узнать, сколько элементов я собираюсь прочитать. Поэтому мне нужно посчитать строки текстового файла. Пока у меня есть это:
int getLinecount (char *file)
{
int ch, count = 0;
FILE *fp = fopen(file, "r");
if(fp == NULL)
{
return -1;
}
while((ch = fgetc(fp)) != EOF)
{
if (ch == '\n');
{
count++;
}
}
fclose(fp);
return count;
}
Это работало довольно хорошо. Я ничего не изменил в текстовом файле, и все равно он печатает 130 000, хотя в файле только 10 000 строк. Единственное, что я написал в своем основном:
linecount = getLinecount("...");
Мне действительно любопытно, где ошибка. Кроме того, есть ли лучший вариант получения linecount?
7 ответов
У вас завершающая точка с запятой ;
после вашего if
заявление. Затем блок всегда выполняется:
{
count++;
}
Точка с запятой после if
: убери это. С конечной точкой с запятой код эквивалентен:
if (ch == '\n') {}
count++;
означающий, что count
увеличивается для каждой итерации цикла (каждый char
в файле).
У вас есть конечная точка с запятой для удаления после if
и для чтения файлов лучше использовать этот код:
while((fgets(blahblahblah)) != NULL) {
counter++;
}
Все нормально кроме точки с запятой (;
), который должен быть удален из строки
if (ch == '\n')
Возможно, вы захотите рассмотреть ОС, которую вы используете для создания и просмотра этого файла.
Скопировано из PHP Echo Line Breaks:
- '\ n' - разрыв строки в linux/unix
- '\r' - это классический разрыв строки в mac [OS X использует вышеуказанный unix \ n]
- '\r' + '\ n' - разрыв строки в Windows
Отдельно от ;
Проблема, упомянутая другими, может найти альтернативное решение в этом посте, поскольку он объясняет, почему он делает вещи так, как он.