我最近写了一段代码来计算文本文件中的行数,然而,while循环部分只是不能正常工作并永远循环。任何人都可以帮我找出这段代码的问题是什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
int main() {
fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r");
int i=0;
while(!feof(fp)){
i++;
}
fclose(fp);
printf("The Number Of Sentence In That File: %d",i);
getch();
}
答案 0 :(得分:2)
问题是通过调用feof(fp)
没有进展,所以执行在文件的开始时停止。你需要明确地调用类似getchar(), fscanf(), fgetc(),
等的东西。这是一个例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
int main() {
fp=fopen("test.txt","r");
int i=0, ch=0;
while((ch = fgetc(fp)) > 0){
if(ch == '\n')
i++;
}
fclose(fp);
printf("The Number Of Sentence In That File: %d\n",i);
getchar();
}
答案 1 :(得分:1)
对于你想要的东西你可以试试这样的东西 -
char *s;
s=malloc(255);
while(fscanf(fp,"%254s",s)==1)
{
i++;
}
...
free(s);
这将提供所需的输出。
另外 -
while(!feof(fp))
控制循环的 feof
总是错误的。你永远不应该在循环中使用feof
。 Refer here
答案 2 :(得分:1)
你的循环没有终止,因为你没有对循环中的文件做任何事情。
我建议使用feof
而不是使用getline()
来控制循环。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
int main() {
fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r");
int i = 0;
char *line = NULL;
size_t len = 0;
while (getline(&line, &len, fp) != -1)
i++;
free(line);
fclose(fp);
printf("The Number Of Sentence In That File: %d\n",i);
}
注意:在这种情况下,line
设置为NULL
,len
设置为0
,因此getline()
将分配一个缓冲区来存储line
1}}。应该在程序返回之前释放此缓冲区。
<强>更新强>
如果您还想知道文件中的字符数,可以使用getline
的返回值:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
int main() {
fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r");
int i = 0;
int j = 0;
int read = 0;
char *line = NULL;
size_t len = 0;
while ((read = getline(&line, &len, fp)) != -1) {
i++;
j += read;
}
free(line);
fclose(fp);
printf("The Number Of Lines In That File: %d\n", i);
printf("The Number Of Chars In That File: %d\n", j);
}