Oui, c'est bien vrai
Bon, voilà ce que j'ai écrit :
for (i = 0; i < numberEntries; i++)
{
fread (&(cData[i].playerName), 1, 20, scoresFile);
readUint16_t (scoresFile, &(cData[i].score));
readUint16_t (scoresFile, &(cData[i].BV));
readUint16_t (scoresFile, &(cData[i].V));
readUint16_t (scoresFile, &(cData[i].TV));
readUint16_t (scoresFile, &(cData[i].lostATGuns));
readUint16_t (scoresFile, &(cData[i].lostAAGuns));
readUint16_t (scoresFile, &(cData[i].lostARTGuns));
readUint16_t (scoresFile, &(cData[i].lostTanks));
readUint16_t (scoresFile, &(cData[i].lostRecons));
readUint16_t (scoresFile, &(cData[i].lostInfanteries));
readUint16_t (scoresFile, &(cData[i].lostFighters));
readUint16_t (scoresFile, &(cData[i].lostBombers));
readUint16_t (scoresFile, &(cData[i].killedATGuns));
readUint16_t (scoresFile, &(cData[i].killedAAGuns));
readUint16_t (scoresFile, &(cData[i].killedARTGuns));
readUint16_t (scoresFile, &(cData[i].killedTanks));
readUint16_t (scoresFile, &(cData[i].killedRecons));
readUint16_t (scoresFile, &(cData[i].killedInfanteries));
readUint16_t (scoresFile, &(cData[i].killedFighters));
readUint16_t (scoresFile, &(cData[i].killedBombers));
}
if (ferror (scoresFile) == 0)
goto Success;
Avec :
int readUint16_t (FILE* stream, uint16_t* target)
{
int a, b;
if ((fread (&a, 1, 1, stream) != 1) || (fread (&b, 1, 1, stream) != 1))
return 0;
*target = (a << 8) + b;
return 1;
}
Je n'ai vu nulle part que lire sur un flux qui a son flag d'erreur activé pouvait poser un problème, j'imagine juste que les fonctions fread/fwrite deviennent inopérantes jusqu'à ce qu'on appelle clearerr(). Donc je pense pouvoir me contenter de tester ferror qu'une fois la fin des lectures atteinte plutôt qu'à chaque accès.