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 :
Avec le printf, le fichier prime.log est correct, par contre sans celui-ci, il y insère des nombres non premiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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.....
Partager