Comment utiliser la fonction feof(FILE *f)?

Je vais avoir un moment difficile avec une boucle while, qui est censé arrêter
lorsque nous arrivons à la fin du fichier. Voici le code en boucle:

do  {
    if (pcompanyRow[0] != '#' && pass == 1) {
        strtok(pcompanyRow, ":");
        pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
        pass = 2;
        fgets(pcompanyRow, 1024, f);
    }
    if (pcompanyRow[0] != '#' && pass == 2) {
        strtok(pcompanyRow, ":");
        pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
        pass = 3;
        fgets(pcompanyRow, 1024 , f);
    }
    if (pcompanyRow[0] != '#' && pass == 3) {
        strtok(pcompanyRow, ":");
        pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
        pass = 4;
        fgets(pcompanyRow, 1024, f);
    }
    if (pass == 4)  {
        AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
        pass = 1;
    }
} while (!feof(f));

Après avoir exécuté avec le débogueur, j'ai remarqué que tous les problèmes de blocage, c'est parce qu'il ne va pas sortir de cette boucle, même lorsqu'elle a atteint l'ensemble des lignes.

Comment dois-je l'écrire correctement?

Comme les réponses-dire, de la brièveté réponse est "Vous n'utilisez pas la fonction feof()". Le seul moment où vous utilisez la " fonction feof ()", c'est quand vous obtenez une erreur ou expressions du folklore indication à partir d'une première fonction d'entrée (fgets() par exemple) et que vous décidez que vous voulez de distinction entre les expressions du FOLKLORE et une erreur. Le plus souvent, la plupart des gens ne se soucient pas de distinction entre les deux (moi en particulier, mais la plupart du code que j'ai vu). Je ne me souviens pas de l'aide de feof() à tous - ce qui signifie que j'ai probablement utilisé une couple de fois dans le dernier quart de siècle de la programmation en C.
Je pense que cela fait beaucoup plus de sens pour vérifier ferror(f) plutôt que !feof(f) si vous voulez savoir si une erreur s'est produite. Parfois feof est utile dans les do-while, mais je suis d'accord c'est assez inutile la plupart du temps.
oui, il est plus logique d'utiliser ferror() que feof(), mais j'avoue que je ne les utilisent pas souvent, que ce soit. Mais je l'ai dit dans mon commentaire - ou de l'ajout d'une seconde depuis que je suis à court d'espace.

OriginalL'auteur k-man | 2010-11-28