匹配文件中每个单词的列和行

时间:2014-07-25 23:46:08

标签: c

我无法正确统计线条!

我的文件是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);

    }
}

2 个答案:

答案 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;
}