Я создаю функцию подсчета слов в 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.
Я уверен, что упускаю что-то очевидное, но я был бы признателен за любую помощь.