Bonjour,

Je souhaite lire dans un fichier des nombres decimaux avec 1 nombre aprés la virgule.
Le probleme que je rencontre est lorsque j'arrive devant un "." d'un nombre.

J'ai essayé de le contourner en ne plus lisant ce caracteres (ex: pour 10.3, je lis le 0eme nomre puis le 2eme nombre).
Ce qui est bizarre est que lorsque je fait ca, le pointeur pointe toujours sur le premier nombre (j'espere que je me suis fait comprendre)

Bref voici mon code (je suis sur qu'on peut faire mieux pour detecter la valeur du nombre avec fread mais je crois que je verrai ca apres)

Petite precision: le nombre que l'on rentre est le nombre de points (chaque point a une abscisse et une ordonnée) . Un petit calcul nous donne le nombre de caracteres réels dans le fichier (n*6). (il faut que le nombre soit decimal avec un nombre apres la virgule). Je dois ensuite rentrer ces points dans un tableaux a deux dimensions

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
 
             int i,u,v,n,k,hc,hp,jo,ju ;
	hp=1;
	hc=1;
	int oui =0;
	int res;
             int t,s;
	int res2;
	int m=0;
	int all;
	float res_final;
	char point_travail[60] ;
	char point_clusters[60];
             int *az=malloc(sizeof(int));
	int *sav_pt=malloc(sizeof(int));
	int *az1 = malloc(sizeof(int));
             int *sav_clu=malloc(sizeof(int));
	FILE *fichier_points;
	printf("Entrer le nom du fichier ou vous avez entres les points travail : ");
	scanf("%59s", point_travail);
 
 
	fichier_points=fopen(point_travail,"r");
 
        while (!fichier_points) {
   		printf("\n !Probleme en lecture de %s ! \n",point_travail);
		printf("\nEntrer le nom du fichier ou vous avez entres les points travail : ");
		scanf("%59s", point_travail);
		fichier_points=fopen(point_travail,"r");
	}
 
 
        printf("\nEntrer le nombre de points : ");
        scanf("%i",az);
 
	for(i=0;i<*az;i++) {
		hp=hp+1;
	}
 
	n=hp-1;
 
 
	float **point_utilisateur = malloc(sizeof(int*)*n);
	 for (i = 0; i < n; ++i) {
		 point_utilisateur[i] = malloc(sizeof(int)*2); 
	}
 
		t=2;
		s=0;
		m=-1;
		all =0;
		res=0;
		res2=0;
		res_final=0;
 
 for(i=0;i<6*n;i++) {
 
 
		/* s permet de se positionner sur le nombre entier flottant (donc en 0, en 3, en 6, etc) */ 
                         /* t permet de se positionner sur le nombre apres la virgule du nombre decimal (donc en 2, en 5, en 8, etc) */ 
 		if (i==s*3 || i==t) {
        		fscanf(fichier_points,"%3i",sav_pt);
			printf("\nsav_pt= %i",*sav_pt);
 
		}
 
 
 
		if (i==(s*3)) {
 
			res=0;
			res2=0;
			res_final=0;
 
 
			for(u=0;u<*sav_pt;u++) {
				res=res+1;
 
			}
 
			s=s+1;
		}
 
 
 
		if (i==t) {
			for(u=0;u<*sav_pt;u++) {
				res2=res2+1;
 
 
			}
			t = t+3;
		}
 
 
 
		res_final = 10*res+res2;
		res_final = (res_final/10);
                          /* res_final est le nombre final lu */
 
		printf("\nres_final = %.1f",res_final);
 
		if (all==0) {
			all =1;
			m=m+1;
		}
		else {
			all=0;
		}
 
		/* m permet de placer le nombre au bon endroit du tableau */
                          /* all permet de savoir si on le met dans le tableau abscisses ou dans celui des ordonnées */
 
		if(all==1) {
			point_utilisateur[m][0]=res_final;
 
 
		}
 
 
		else {
			point_utilisateur[m][1]=res_final;
 
 
 
		}
 
 
 
 
        }
 
	fclose(fichier_points);