我无法正确统计线条!
我的文件是a1.txt
:
Words are flowing out \n
like \n
They \n
Pools dsa\n
Possessing
我的代码:
int main()
{
FILE * file2;
file2 = fopen("a1.txt","r");
int c ;
unsigned long newline_count =1,sthlh_count=0;
char str[56];
while (fscanf(file2,"%s",str)!=EOF)
{
c=fgetc(file2);
printf("%s\n",str);
if ( c == '\n' ) newline_count++;
if ( c == ' ' ) sthlh_count++;
printf("%d %d\n",newline_count,sthlh_count);
}
}
答案 0 :(得分:1)
我不确定你的问题究竟是什么,但我立即看到了一件事。
while (fscanf(file2,"%s",str)!=EOF)
在while循环的主体中,您永远不会使用str
的值保存printf
。请记住,fscanf
不仅会读取文件,而且还会在文件对象中移动一个指针,告诉运行时文件位于文件中,因此读取到str的所有字符都不会被循环体。这就是你失去线条的原因。"
这是你应该做的事情:
while ( (c=fgetc(file2)) != EOF ) ...
在这里,您只需阅读每个字符,将其存储在c
中,然后检查它是否为EOF
。此外,如果您仍然希望printf工作,只需在循环体中打印出该字符,而不是打印该行。放弃另一条fgetc线(或者你将"失去"字符!)。
答案 1 :(得分:0)
#include <stdio.h>
#include <string.h>
int main(){
FILE *file2 = fopen("a1.txt", "r");
unsigned long newline_count = 0, word_count=0;
char line[1024], *word , *delimiter = " \n";
while (fgets(line, sizeof(line), file2)){
++newline_count;
for(word = strtok(line, delimiter); word ; word = strtok(NULL, delimiter)){
printf("%lu %lu : %s\n", newline_count, ++word_count, word);
}
}
fclose(file2);
return 0;
}