Ciao a tutti, devo realizzare un programma che conti il numero di caratteri, parole e linee in un file di testo.

Facile, no?

codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    FILE* fp = NULL;

    int characters = 0;
    int words = 0;
    int lines = 0;

    char buf = 0;

    fp = fopen(argv[1], "rb");

    while (!feof(fp))
    {
        fscanf(fp, "%c", &buf);

        characters++;

        if (buf == ' ') words++;

        if (buf == '\n')
        {
            words++;
            lines++;
        }
    }

    printf("%d %d %d\n", characters, words, lines);

    return 0;
}
L'ho testato su questo file:

codice:
Nel mezzo del cammin di nostra vita
Mi ritrovai per una selva oscura,
che la diritta via era smarrita.
E i risultati che mi stampa sono tutti incrementati di 1! Nel file ci sono 103 caratteri (spazi e punteggiatura inclusi), 19 parole, 3 linee.

Il programma stampa 104, 20, 4.

Ho anche provato a seguire manualmente l'esecuzione con il debugger, carattere per carattere. Arrivato a 103 caratteri, il ciclo si ferma, esce, parte la printf... che stampa 104. -.-

Perchè!?