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 : 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;
}
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.....