我正在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个换行符。
当我运行这些.txt文件时,第一个文件总是正确计数,返回5,但是第二个文件似乎正在读取文件末尾的3个换行符,并将计数增加到7。 / p>
我确定我遗漏了一些明显的东西,但我将不胜感激。
答案 0 :(得分:1)
提示:如果将文本文件从Windows移到Unix系统计算机上,则可以始终在文件上运行dos2unix命令,而无需担心检查Windows系统使用的换行格式。