je reformule mon problème pour ceux qui pourrai m'aider:

J'ai ecrit un programme qui entre en parametre deux fichiers txt et une valeur numerique

Je compare ligne par ligne les fichiers et j'affiche dans un fichier les lignes ou il y a difference.
En plus je verifie lorsqu'il y a difference si le caractere lu est une valeur numerique et alors je m'assure que l'ecart est inferieur à la valeur donnée en paramètre.

Mon code qui suit ne m'indique pas d'erreur à la compilation mais il ne fait pas ce que je veux.
Je suis débutant veuillez excuser mes imprecisions et erreurs

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
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
void retrait_blanc (char* chaine, char cible[]);
void traitement_fichiers(char* filename1, char* filename2,char* delta);
char* formater_valeur (char* token);
int traitement_valeurs (int valeurs1, int valeurs2,float precision);
int traitement_ligne (char* ligne, float valeurs[]);
 
#include "Diff_txt.h"
 
 
#define BUFFSIZE 256
#define OK 0
#define KO 1
 
//recuperation des fichiers et du delta
void main(int argc, char** argv){
 
	if(argc != 4)
		printf("Usage: <%s> <file1> <file2> <DELTA> \n", argv[0]);
	else
		traitement_fichiers(argv[1], argv[2], argv[3]);
}
 
//si le caractere different est un chiffre comparer l'ecart à delta
int traitement_valeurs (int valeurs1, int valeurs2, float precision) {
	if(valeurs1 == valeurs2){
		return OK;
	}
		else if (((valeurs1 - valeurs2)||(valeurs2 - valeurs1)) <= precision	
		&&
			  (((valeurs1 - valeurs2)/valeurs1) <= precision)){
			return OK;
		}
 
		return KO;	
}
 
//épurer les lignes des fichier en supprimant tous les blancs
void retrait_blanc (char* chaine, char cible[]){
    int i=0, j=0;
	for (i = 0; i < (int)strlen(chaine); i++){
		if(chaine[i] != ' ')
			cible[j++] = chaine[i];
	}
 
	cible[j] = '\0';
}
 
 
void traitement_fichiers(char* filename1, char* filename2, char* delta){
	int k = 0;
	char buf1[BUFFSIZE];
	char buf2[BUFFSIZE];
	char ligne1[BUFFSIZE];
	char ligne2[BUFFSIZE];
	char courant1;
	char courant2;
	FILE *file1 = NULL;
	FILE *file2 = NULL;
	FILE *file3 = NULL;
	float precision=atof(delta);
 
	if((file1 = fopen(filename1, "r")) == NULL)	{
		fprintf(stderr, "Erreur à l'ouverture du fichier <%s>\n", filename1);
		exit(1);
	}
	if((file2 = fopen(filename2, "r")) == NULL){
		fprintf(stderr, "Erreur à l'ouverture du fichier <%s>\n", filename2);
		exit(1);
	}
 
 
	do{	
		fgets(buf1,BUFFSIZE, file1); 
		fgets(buf2,BUFFSIZE, file2);
 
		k++; //pour le numero de ligne
		retrait_blanc (buf1, ligne1);
		retrait_blanc (buf2, ligne2);
 
		if(strcmp(ligne1, ligne2) != 0) {
 
			if((file3 = fopen("resultat", "a")) == NULL) {
					fprintf(stderr, "Erreur à l'ouverture du fichier resultat\n");
					exit(1);
			}
 
			if (isalpha(courant1 = getc(file1))==0  &&	isalpha(courant2 = getc(file2))==0){
 
				if(traitement_valeurs (courant1, courant2, precision) == KO) {
 
						fprintf(file3, "%s(ligne %d):\t%s\n", filename1, k, buf1);
						printf("%s(ligne %d):\t%s\n", filename1, k, buf1);
						fprintf(file3, "%s(ligne %d):\t%s\n", filename2, k, buf2);	
						printf("%s(ligne %d):\t%s\n", filename2, k, buf2);
				}
			}
 
			buf1[0]='\0';buf2[0]='\0';
			ligne1[0]='\0';ligne2[0]='\0';
		}
 
	}
	while(!feof(file1) && !feof(file2));
 
	fclose(file1);
	fclose(file2);
	fclose(file3);
}