IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

blocage comparaison


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut blocage comparaison
    Je ne voit pas pourquoi mon programme ne marche pas il compare deux lignes de deux fichiers:
    je veut qu'il stoke la ligne dans un fichier si il trouve une differrence et en plus si le caractere different est un chiffre il calcul l'ecart (fonction traitement valeur) mais rien ne se passe même si il existe une difference qu'elle soit alpha ou numerique... Merci pour votre aide
    do
    {
    fgets(buf1,BUFFSIZE, file1);
    fgets(buf2,BUFFSIZE, file2);
    //recuperation de chaque ligne
    k++; //pour le numero de ligne
    //une petite fonction pour enlever blancs
    retrait_blanc (buf1, ligne1);
    retrait_blanc (buf2, ligne2);
    //je compare ensuite
    if(strcmp(ligne1, ligne2) != 0) {
    courant1=getc(file1);
    courant2=getc(file2);

    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);

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: blocage comparaison
    Citation Envoyé par Nalido
    do
    {
    please.

    Et aussi, ce serait bien d'avoir du code complet, qu'on puisse tester sans passer une demi-heure à inventer le code manquant...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    désolé voici le code complet
    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
    #include "Diff_txt.h"
     
     
    #define BUFFSIZE 256
    #define OK 0
    #define KO 1
     
     
    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]);
     
     
    }
     
     
    int traitement_valeurs (int valeurs1, int valeurs2, float precision) {
    	//int i=0;
     
    	//do
    	//{
    		if(valeurs1 == valeurs2)
    			{return OK;}
    		else if (
    			((valeurs1 - valeurs2)||(valeurs2 - valeurs1)) <= precision	
    		&&
    			  (((valeurs1 - valeurs2)/valeurs1) <= precision)
    	//		&&(((valeurs2[i] - valeurs1[i])/valeurs2[i]) <= precision)  )
    				)
    		{	return OK;}
     
    		return KO;	
    	//}
    	//while(valeurs1 && valeurs2);
     
    }
     
     
    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)
    {// ret1, ret2
    	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 valeurs1;
    	//float valeurs2;
    	float precision=atof(delta);
    //	printf("%f", precision);
     
     
     
    	//valeurs1 = 0;
    	//valeurs2 = 0;
     
     
    	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) {
    			courant1=getc(file1);
    			courant2=getc(file2);
     
    			if((file3 = fopen("resultat", "a")) == NULL) {
    					fprintf(stderr, "Erreur à l'ouverture du fichier resultat\n");
    					exit(1);
    			}
     
    	//courant=getc(file1);
    	//fprintf(file3,"le carc cour est:%d\n",courant);
    				//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);
    }
    [Balises code rajoutées par fearyourself, merci d'y penser la prochaine fois]

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    test.c:2:23: error: Diff_txt.h: No such file or directory
    test.c:11: warning: return type of 'main' is not 'int'
    test.c: In function 'main':
    test.c:14: error: implicit declaration of function 'printf'
    test.c:14: warning: incompatible implicit declaration of built-in function 'printf'
    test.c:16: error: implicit declaration of function 'traitement_fichiers'
    test.c:16: warning: nested extern declaration of 'traitement_fichiers'
    test.c: At top level:
    test.c:22: warning: no previous prototype for 'traitement_valeurs'
    test.c:45: warning: no previous prototype for 'retrait_blanc'
    test.c: In function 'retrait_blanc':
    test.c:47: error: implicit declaration of function 'strlen'
    test.c:47: warning: incompatible implicit declaration of built-in function 'strlen'
    test.c: At top level:
    test.c:58: warning: no previous prototype for 'traitement_fichiers'
    test.c:58: warning: conflicting types for 'traitement_fichiers'
    test.c:16: warning: previous implicit declaration of 'traitement_fichiers' was here
    test.c: In function 'traitement_fichiers':
    test.c:66: error: 'FILE' undeclared (first use in this function)
    test.c:66: error: (Each undeclared identifier is reported only once
    test.c:66: error: for each function it appears in.)
    test.c:66: error: 'file1' undeclared (first use in this function)
    test.c:66: error: 'NULL' undeclared (first use in this function)
    test.c:67: error: 'file2' undeclared (first use in this function)
    test.c:68: error: 'file3' undeclared (first use in this function)
    test.c:72: error: implicit declaration of function 'atof'
    test.c:72: warning: nested extern declaration of 'atof'
    test.c:81: error: implicit declaration of function 'fopen'
    test.c:81: warning: nested extern declaration of 'fopen'
    test.c:83: error: implicit declaration of function 'fprintf'
    test.c:83: warning: incompatible implicit declaration of built-in function 'fprintf'
    test.c:83: error: 'stderr' undeclared (first use in this function)
    test.c:84: error: implicit declaration of function 'exit'
    test.c:84: warning: incompatible implicit declaration of built-in function 'exit'
    test.c:88: warning: incompatible implicit declaration of built-in function 'fprintf'
    test.c:89: warning: incompatible implicit declaration of built-in function 'exit'
    test.c:95: error: implicit declaration of function 'fgets'
    test.c:95: warning: nested extern declaration of 'fgets'
    test.c:101: error: implicit declaration of function 'strcmp'
    test.c:102: error: implicit declaration of function 'getc'
    test.c:102: warning: nested extern declaration of 'getc'
    test.c:106: warning: incompatible implicit declaration of built-in function 'fprintf'
    test.c:107: warning: incompatible implicit declaration of built-in function 'exit'
    test.c:115: warning: passing argument 3 of 'traitement_valeurs' as 'float' rather than 'double' due to prototype
    test.c:117: warning: incompatible implicit declaration of built-in function 'fprintf'
    test.c:118: warning: incompatible implicit declaration of built-in function 'printf'
    test.c:129: error: implicit declaration of function 'feof'
    test.c:129: warning: nested extern declaration of 'feof'
    test.c:131: error: implicit declaration of function 'fclose'
    test.c:131: warning: nested extern declaration of 'fclose'
    Par quoi tu veux qu'on commence ?


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    Encore desole mais je ne suis pas un habitué des forums

    j'ai mis les prototypes dans un fichiers .h
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>


    //double power (double base, int n);
    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[]);


    car mon code est compilé sans pb

    que voulez vous dires par pensez aux balises

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    Désolé je débute vraiment dans le forum voici le 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
    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
     
    #include "Diff_txt.h"
     
     
    #define BUFFSIZE 256
    #define OK 0
    #define KO 1
     
     
    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]);
     
     
    }
     
     
    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;	
    }
     
     
    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) {
    			courant1=getc(file1);
    			courant2=getc(file2);
     
    			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);
    }
    et voici pour le fichier .h


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
     
     
    //double power (double base, int n);
    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[]);
    [Balises codes corrigées par fearyourself, merci d'utiliser le bouton Prévisualisation pour vérifier le message...]

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Nalido
    que voulez vous dires par pensez aux balises
    Merci de lire les regles du forum...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 64
    Par défaut
    c fait le code est balisée

Discussions similaires

  1. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  2. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  3. [Kylix] Blocage Kylix 3
    Par DevX dans le forum EDI
    Réponses: 2
    Dernier message: 13/11/2002, 20h29
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo