我正在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。
我确定我错过了一些明显的东西,但我会感激任何帮助。
提示:如果您将文本文件从Windows移动到Unix系统机器,您始终可以对文件运行dos2unix命令,您无需担心检查Windows系统使用的换行格式。