printf modifie le comportement
Bonjour,
je viens de rencontrer un problème assez bizarre que je n'arrive pas à m'expliquer.
J'ai écrit un petit programme qui calcule des nombres premiers, mais dépendant du fait que je fasse un printf ou pas, les données renvoyées sont erronnées.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int prime_number(int n){
int res=1;
FILE * f = fopen("prime.log", "r+");
if(!f)
{
fprintf(stderr, "fopen failed\n");
exit(EXIT_FAILURE);
}
char *tmp_number;
tmp_number=malloc(100);
while((fgets(tmp_number,100,f))!=NULL){
int prime;
char *tmp;
strncpy(tmp,tmp_number,strlen(tmp_number)-1);
prime=atoi(tmp);
if(n % prime == 0){
res=0;
break;
}
}
if(res==1)
{
sprintf(tmp_number,"%d",n);
strcat(tmp_number,"\n");
fwrite(tmp_number,1,strlen(tmp_number),f);
}
fclose(f);
return res;
}
int main()
{
int i=4;
int count=2;
while(count<100)
{
printf("test %d\n",i); // Pas de soucis avec ce printf, mais sans :evilred:
if(prime_number(i)==1)
count++;
i++;
}
return 0;
} |
Avec le printf, le fichier prime.log est correct, par contre sans celui-ci, il y insère des nombres non premiers.
Le fichier prime.log contient 2 lignes au début.
prime.log:
2
3
Quelqu'un peut-il m'expliquer comment ceci est possible stp ?
Le traitement devrait être le même à tous les coups.....