Есть ли способ подсчитать общее количество пустых строк в файле на языке C. Я пытался, и ниже мой код, но он не работает.
void countLines(char *f1)
{
FILE *fp;
fp=fopen(f1,"r");
int d=fgetc(fp),count=0,countbl=0;
while(d != EOF)
{
if(d=='\n')
{
d=fgetc(fp);
if(d=='\n')
countbl++;
count++;
fseek(fp,-1,SEEK_CUR);
}
d=fgetc(fp);
}
printf("%d %d",count+1,countbl);
}
Я использую fgetc для чтения файла charcater by charcater, когда fgetc встречает \n
. Я проверяю следующий символ, если он снова \n
, это означает, что это пустая строка, но она не работает.
Образец ввода
fileCount.txt(name of text file)
Содержимое файла
This is line one
Hello, welcome to programming
Code quotient - Get better at coding
b
Пример вывода
8 4
Здесь 8 — общее количество строк, а 4 — общее количество пустых строк.
Вот новый код, но он все еще не работает
void countLines(char *f1)
{
FILE *fp;
fp=fopen(f1,"r");
int d=fgetc(fp),count=0,countbl=0,temp=0;
while(d != EOF)
{
//printf("%c %c",temp ,d);
if(d=='\n' && temp=='\n' )
countbl++;
if(d=='\n')
count++;
temp=d;
d=fgetc(fp);
}
printf("%d %d",count+1,countbl);
}
fseek
— громоздкий способungetc
обозначения персонажа. Оба они не нужны, если вы сохраняете значение ранее прочитанного символа (и инициализируете его значением'\n'
, так что символ новой строки в начале считается пустой строкой). Смотрите назад, а не вперед. Ведь'\n'
стоит в конце строки, значит вас интересует то, что вы уже видели. - person M Oehm   schedule 30.04.2020fgets
не встречает пустых строк, он встречает одиночные символы. Вы, как программист, должны определить, есть ли пустая строка. Кстати, ваше определение двух последовательных новых строк очень узкое. Пустая строка может содержать пробелы и символы табуляции. - person M Oehm   schedule 30.04.2020count + 1
вместо простоcount
. - person M Oehm   schedule 30.04.2020countnl
остается нулем, и я добавил 1 кcount
, потому чтоEOF
будет достигнуто в последней строке и не будет подсчитано, но я также должен подсчитать общее количество строк. - person Tom   schedule 30.04.2020