acidjackproject
Messages postés9Date d'inscriptionsamedi 18 novembre 2000StatutMembreDernière intervention 5 avril 2008
-
5 avril 2008 à 16:51
klmlk
Messages postés2Date d'inscriptionmercredi 20 juin 2007StatutMembreDernière intervention28 juillet 2008
-
7 mai 2008 à 14:52
Bonjour, je programme en C et j'ai un souci:
j'ai:
void main()
{
int i;
long numprodb[100]={1,2,3,4,5};
long numprod[100]={0};
long numero;
FILE *fnumero=NULL;
Si j'affiche le I après tout il a fais 6 fois la boucle et non 5, ce qui pose problème quand je veux récupérer nproduit et moin vecteur NumProd correct puisqu'il contient 2 fois le dernier nombre (a savoir 1,2,3,4,5,5).
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 5 avril 2008 à 18:07
Bonjour,
feof() retourne faux lorsqu'on lit APRES la fin de fichier ! Concrètement on fait une boucle de lecture en plus avec le contenu précédent conservé dans le buffer de lecture, d'où ce doublon.
Il vaut mieux sortir de la boucle de lecture lorsque fread() ne rend pas la quantité demandée :
while(true)
{
if (fread(&numero,sizeof(numprod[i]),1,fnumero) != 1) break;
...
}
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 5 avril 2008 à 18:49
Ca n'est pas plus simple (3 appels de fonctions au lieu d'un) !
Ca considère la première valeur comme différente des autres !
C'est la porte ouverte à bien des bugs !!!
Voilà encore plus rapide. Pour ton fwrite, numprodb est déjà un tableau. On pourrait écrire tout d'un coup plutôt que faire cette boucle inutile:
fwrite(numprodb,sizeof(long),5,fnumero);
Et si tu veux beaucoup plus de rapidité, modifie ta fonction chargement pour qu'elle puisse traiter des buffers au lieu d'un seul long à la fois.