Простой Количество слов в C - PullRequest
1 голос
/ 20 марта 2019

Я создаю функцию подсчета слов в 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.

Я уверен, что упускаю что-то очевидное, но я был бы признателен за любую помощь.

1 Ответ

1 голос
/ 21 марта 2019

Совет: если вы перемещаете текстовый файл из windows на компьютер с системой Unix, вы всегда можете запустить команду dos2unix для файлов, и вам не нужно будет беспокоиться о проверке формата новой строки, который использует система Windows.

...