【发布时间】:2020-08-14 14:12:27
【问题描述】:
有没有办法用 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遇到\n时,我正在使用fgetc逐个字符读取文件我检查下一个字符是否再次\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 有什么用?
-
fseek是ungetc字符的一种繁琐方式。如果您保留先前读取的 char 的值(并将其初始化为'\n',以便开头的换行符算作空行),则两者都是不必要的。向后看,而不是向前看。毕竟'\n'在一行的末尾,你对你已经看到的东西感兴趣。 -
@John3136 在第一个 if 条件下,d=fgetc(fp) 会将指针移动到下一个字符,以便将指针向后移动我使用过的fseek
-
fgets不会遇到空行,它会遇到单个字符。作为程序员,您必须确定是否有空行。顺便说一句,您对两个连续换行符的定义非常狭窄。空行中可以有空格和制表符。 -
请不要说“不工作”,而要努力描述什么不工作。你会得到哪些错误?您的实际输出与预期输出有何不同?
标签: c file file-handling fseek