简单的字数在C中

问题描述 投票:1回答:1

我正在c中创建一个字数统计函数作为更大的文本文件处理程序的一部分,但我遇到了一些结果差异。

以下是相关的代码段:

#define OUT 0
#define IN  1
unsigned countWords(char * filename) {

    FILE * fp = fopen(filename, "r");
    int state = OUT;
    int wc = 0;
    char c;

    if(fp == NULL) {
        perror("Could not open file");
    }
    while((c = fgetc(fp)) != EOF) {
            printf("c: %c & wc: %d\n", c, wc);
        if(c == ' ' || c == '\n' || c == '\t') {
            state = OUT;
        }
        else if (state == OUT) {
            state = IN;
            ++wc;
        }
    }
    fclose(fp);
    return wc;
}

我正在用两个简短的.txt文件测试这个函数:

word word word  word
word

和..

word word word
word 



请注意,在第二个.txt中,最后一个单词后跟3个换行符。

当我运行这些.txts时,第一个文件总是正确计数,返回5,但第二个文件似乎正在读取文件末尾的3个换行符并将计数增加到7。

我确定我错过了一些明显的东西,但我会感激任何帮助。

c file-io word-count
1个回答
1
投票

提示:如果您将文本文件从Windows移动到Unix系统机器,您始终可以对文件运行dos2unix命令,您无需担心检查Windows系统使用的换行格式。

© www.soinside.com 2019 - 2024. All rights reserved.