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 :

Erreur à trouver


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Erreur à trouver
    Vous connaissez tous le fameux jeu où il faut trouver des erreurs incrustés dans une image ^^
    Sur ce principe je lance ce nouveau jeu ( humour mais je galère VRAIMENT VRAIMENT )
    Voici mon programme:

    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
     
    /*****************************************************************
    File:   lecture.c
     
    Author: Johann 
     
    Brief: Source du bloc lecture des champs
     
    *******************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
     
    /* #include "lecture.h" 
    /*! --------------------------------------------------------------
    */
     
    typedef struct valeur {
     
    	float ACR;
    	float DCR;
    	float ACIR;
    	float DCIR;
    	}VALEUR;
     
       VALEUR lecture (VALEUR nonFiltre){ 
     
          int reception[21];
          char usb;
          int i,illicite,compt;
          int ACR_i,ACIR_i,DCR_i,DCIR_i;
          FILE * entree;
    		nonFiltre.ACR = 0;
          nonFiltre.ACIR = 0;
          nonFiltre.DCR = 0;
          nonFiltre.DCIR = 0;
    		ACR_i=0;
    		ACIR_i=0;
    		DCR_i=0;
    		DCIR_i=0;
     
          illicite=0;		
          compt=0;
    		printf("entree\n");
          entree = fopen("record1.dat", "r"); // on dit au pointeur de lire dans le fichier record1.dat
    		printf("%d\n",entree);
       	int transf;
    		printf("zero\n");
     
          do
          {
     
             fscanf(entree, "%c", &usb); // on prend l'octet
     
             transf = (int)usb-48; // char=>int
    			printf("un\n");
             if (transf != -35 && compt!=20){ // si on a pas BS
                reception[i] = transf; // on place le chiffre, numéro correspond à un caractère dans le tableau
                compt++; // on incrémente pour ne pas réécrire dans la même case
    				i++;
    				printf("deux\n");
             }	
             else if (compt <=19) { // le cas où un BS s'introduit avant son heure et donc qu'un problème s'est produit
                for(i=0; i<= 20; i++){ // réinitialisation du tableau
                   reception[i]=0;
                   compt=20; // le programme réenvoi les anciennes valeurs qui ne devraient pas être très éloigné de la réalité
    					printf("trois\n");
                }
             }
     
             else{
                for(i=0; i<=20; i++){
    					printf("%d\n",reception[i]);
                   if(((reception[i]<= -1) && (reception[i]>=10)) || (reception[i]!=-35) || (reception[i]!=-4) || (reception[i]!=-38)) { //vérification d'un caractère illicite
                      illicite=1;}
    						printf("quatre\n");
                }
                if (illicite ==1) {
    					printf("cinq\n");
                   for(i=0; i<= 20; i++){ // réinitialisation du tableau
                      reception[i]=0;}  
                }		 
                else { // si tous les chiffres ont été validé, on extrait les valeurs
    					printf("six\n");
                   ACR_i= 1000*reception[0]+100*reception[1]+10*reception[2]+reception[3];
                   DCR_i= 1000*reception[5]+100*reception[6]+10*reception[7]+reception[8];
                   ACIR_i= 1000*reception[10]+100*reception[11]+10*reception[12]+reception[13];
                   DCIR_i= 1000*reception[15]+100*reception[16]+10*reception[17]+reception[18];
                }
                compt++; // on sort de la boucle
             } // on sort des if
     
          }while(compt<=20);
          nonFiltre.ACR = (float)ACR_i;  // conversion en float
          nonFiltre.ACIR = (float)ACIR_i;
          nonFiltre.DCR = (float)DCR_i;
          nonFiltre.DCIR = (float)DCIR_i;
     
          return nonFiltre;		     
       }
     
     
    int main() {
     
    VALEUR nonFiltre;
    nonFiltre = lecture (nonFiltre);
    printf ("%f %f %f %f",  nonFiltre.ACR, nonFiltre.DCR, nonFiltre.ACIR, nonFiltre.DCIR);
     
    return 0;
    }
    le fichier où prendre les valeurs
    2241,2030,2219,2030

    2185,2029,2183,2029

    2335,2029,2208,2029

    2320,2028,2325,2028

    2297,2028,2195,2028

    2282,2028,2165,2028

    2342,2027,2282,2027

    2220,2027,2366,2027

    2065,2026,2233,2026

    2268,2026,2353,2026

    2562,2026,2231,2026

    2346,2025,2326,2025

    2488,2025,2432,2025

    2450,2024,2566,2024

    2624,2024,2702,2024

    2630,2024,2719,2024

    2602,2023,2490,2023

    2537,2023,2375,2023

    2468,2023,2695,2023

    2323,2022,2614,2022

    2648,2022,2489,2022

    2488,2021,2674,2021

    2550,2021,2507,2021

    2558,2021,2716,2021

    2679,2020,2497,2020

    2460,2020,2774,2020

    2877,2019,2950,2019

    2638,2019,2688,2019

    2832,2019,2937,2019

    2826,2018,3032,2018

    2753,2018,2777,2018

    2813,2018,2686,2018

    2652,2017,2635,2017

  2. #2
    Membre régulier Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Points : 75
    Points
    75
    Par défaut
    Salut!

    Utilise, please, les balises [code] pour ton code, sinon c'est très difficilement lisible. Et si tu pouvais dire en deux mots ce que ton programme est censé faire et selon quel algo, ça aiderait aussi, je pense
    "Les hommes et les femmes qui, sans bouger de leur bureau ou de leur bibliotheque, sans développer leur puissance corporelle et leurs infinies dimensions, parviennent, par une opération de la conscience, à une tristesse pessimiste qui se pretend lucide ne font que constater, sans le savoir, que toute identification du multiple de la vie à la vacuite de la conscience mène inévitablement à ce pessimisme et cette impuissance."

    extrait de "La fragilité" de Benasayag

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    i n'est pas initialisé.

    Il faudrait aussi tester le retour de fopen, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto = fopen("toto.dat", "r") ;
    if(NULL == toto) {
        perror("toto.dat");
        exit(0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transf = (int) usb - 48;
    48 ? '0' était pas plus clair ?

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    rebonjour à tous,
    Le programme doit prendre octet par octet dans un fichier .dat
    les printf avec marqué un deux tois etc sont juste là pour 'indiquer où le programme se balade.
    Donc il les conversion en entier, il vérifier que ce soit des chiffres virgules LF et retour a la ligne.
    Dsl pour les balise . C'est pas QUOTE ??
    Je suis un gros novice mais d'après moi le programme n'arrive pas à prendre les octet dut surement à une mauvaise utilisation du fscanf.

    Si un expert pouvait me le mettre sur pied ce sera super sympa
    J'ai pas mal commenté j'espère que ç vous aidera

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par hexter Voir le message
    Dsl pour les balise . C'est pas QUOTE ??
    QUOTE veut dire "citation" et sert à reprendre les propos de quelqu'un d'autre. CODE sert à contenir des morceaux de programmes et, pour cela, utilise une police à chasse fixe, met en place une coloration syntaxique et (surtout) met en place une barre de défilement lorsque le code est trop long.

    Tu peux corriger toi-même ton message en utilisant le bouton "Éditer" sur sa droite, si tu le souhaites.

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    j'ai rectifier juste après, ça va c'est assez lisible ??
    Quelqu'un pourrait-il m'aider ?

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Bonsoir,
    Citation Envoyé par hexter Voir le message
    j'ai rectifier juste après, ça va c'est assez lisible ??
    Quelqu'un pourrait-il m'aider ?
    Peux tu décrire ton problème ?

    As tu vu ce que j'ai écrit plus haut :
    Citation Envoyé par mabu Voir le message
    i n'est pas initialisé.
    ?

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Le bug se situe au moment où je met mes chiffres dans le tableau.
    Please jetez y un coup d'oeil

  9. #9
    Membre régulier Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Points : 75
    Points
    75
    Par défaut
    Essaie d'exécuter ce code, et je pense que tu verras où est ton souci:

    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
    /*****************************************************************
    File:   lecture.c
     
    Author: Johann 
     
    Brief: Source du bloc lecture des champs
     
    *******************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
     
    /* #include "lecture.h" 
    ! --------------------------------------------------------------
    */
     
    typedef struct valeur {
     
    	float ACR;
    	float DCR;
    	float ACIR;
    	float DCIR;
    	}VALEUR;
     
       VALEUR lecture (VALEUR nonFiltre){ 
     
          int reception[21];
          char usb;
          int i,illicite,compt;
          int ACR_i,ACIR_i,DCR_i,DCIR_i;
          FILE * entree;
    		nonFiltre.ACR = 0;
          nonFiltre.ACIR = 0;
          nonFiltre.DCR = 0;
          nonFiltre.DCIR = 0;
    		ACR_i=0;
    		ACIR_i=0;
    		DCR_i=0;
    		DCIR_i=0;
     
          illicite=0;		
          compt=0;
    		printf("entree\n");
          entree = fopen("record1.dat", "r"); /* on dit au pointeur de lire dans le fichier record1.dat*/
    		printf("%d\n", entree);
    	int transf;
    		printf("zero\n");
     
          do
          {
     
             fscanf(entree, "%c", &usb); /* on prend l'octet*/
     
             transf = (int)usb-48; /* char=>int*/
    			printf("un\n");
             if (transf != -35 && compt!=20){ /* si on a pas BS*/
                reception[i] = transf; /* on place le chiffre, numéro correspond à un caractère dans le tableau*/
    		printf("reception[%d] = %d\n", i, reception[i]);
                compt++; /* on incrémente pour ne pas réécrire dans la même case*/
    				i++;
    				printf("deux\n");
             }	
             else if (compt <=19) { /* le cas où un BS s'introduit avant son heure et donc qu'un problème s'est produit*/
                for(i=0; i<= 20; i++){ /* réinitialisation du tableau*/
                   reception[i]=0;
     
                   compt=20; /* le programme réenvoi les anciennes valeurs qui ne devraient pas être très éloigné de la réalité */
    					printf("trois\n");
                }
             }
     
             else{
                for(i=0; i<=20; i++){
    					printf("%d\n",reception[i]);
                   if(((reception[i]<= -1) && (reception[i]>=10)) || (reception[i]!=-35) || (reception[i]!=-4) || (reception[i]!=-38)) { /*vérification d'un caractère illicite*/
                      illicite=1;}
    						printf("quatre\n");
                }
                if (illicite ==1) {
    					printf("cinq\n");
                   for(i=0; i<= 20; i++){ /* réinitialisation du tableau*/
                      reception[i]=0;}  
                }		 
                else { /* si tous les chiffres ont été validé, on extrait les valeurs*/
    					printf("six\n");
                   ACR_i= 1000*reception[0]+100*reception[1]+10*reception[2]+reception[3];
                   DCR_i= 1000*reception[5]+100*reception[6]+10*reception[7]+reception[8];
                   ACIR_i= 1000*reception[10]+100*reception[11]+10*reception[12]+reception[13];
                   DCIR_i= 1000*reception[15]+100*reception[16]+10*reception[17]+reception[18];
                }
                compt++; /* on sort de la boucle*/
             } /* on sort des if*/
     
          }while(compt<=20);
          nonFiltre.ACR = (float)ACR_i;  /* conversion en float*/
          nonFiltre.ACIR = (float)ACIR_i;
          nonFiltre.DCR = (float)DCR_i;
          nonFiltre.DCIR = (float)DCIR_i;
     
          return nonFiltre;		     
       }
     
     
    int main() {
     
    VALEUR nonFiltre;
    nonFiltre = lecture (nonFiltre);
    printf ("%f %f %f %f",  nonFiltre.ACR, nonFiltre.DCR, nonFiltre.ACIR, nonFiltre.DCIR);
     
    return 0;
    }
    Ca te printf les valeurs de ton tableau à chaque fois.

    Problèmes que j'ai vus:
    0) i n'est pas initialisé, comme dit mabu ^^

    1)Je crois que tu ne gères pas le cas i = 20, du coup, reception[20] contient une valeur toute bizarre car non initialisé.

    2) Ton test de valeur illicite est bizarre aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(((reception[i]<= -1) && (reception[i]>=10)) || (reception[i]!=-35) || (reception[i]!=-4) || (reception[i]!=-38)) { /*vérification d'un caractère illicite*/
                      illicite=1;}
    ((reception[i]<= -1) && (reception[i]>=10)) <<< ça, ce sera toujours faux, car une valeur ne pourra pas être à la fois plus petite que -1 et plus grande que 10;

    Ensuite, admettons que reception[i] = -35. Donc la valeur de ton test sera:
    FAUX ou (-35 != -35) ou (-35 != -4) ou (-35 = -38)
    Donc
    FAUX ou FAUX ou VRAI ou VRAI

    Or, en logique, lorsqu'une formule est faite qu'avec des "ou", si une seule des clauses est à VRAI, toute la formule est VRAI.
    Donc en fait, ton test de valeur illicite est toujours vérifié, quelle que soit la valeur lue.
    Du coup, ton tableau sera toujours reinitialisé à 0, et les quatre valeurs que tu renvoies seront nulles.
    Ce qui est le cas =)

    En fait, tu devrais faire un schéma sur papier de ce que tu veux faire et tester avant de le coder, ce sera peut-être plus clair
    "Les hommes et les femmes qui, sans bouger de leur bureau ou de leur bibliotheque, sans développer leur puissance corporelle et leurs infinies dimensions, parviennent, par une opération de la conscience, à une tristesse pessimiste qui se pretend lucide ne font que constater, sans le savoir, que toute identification du multiple de la vie à la vacuite de la conscience mène inévitablement à ce pessimisme et cette impuissance."

    extrait de "La fragilité" de Benasayag

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mikhailo Voir le message
    Ensuite, admettons que reception[i] = -35. Donc la valeur de ton test sera:
    FAUX ou (-35 != -35) ou (-35 != -4) ou (-35 = -38)
    Donc
    FAUX ou FAUX ou VRAI ou VRAI

    Or, en logique, lorsqu'une formule est faite qu'avec des "ou", si une seule des clauses est à VRAI, toute la formule est VRAI.
    Donc en fait, ton test de valeur illicite est toujours vérifié, quelle que soit la valeur lue.
    Hey !!! Joli pour un débutant en info

    En fait, tu viens de redémontrer les lois de "De Morgan".
    Quand on a une expression avec des "et", style A et B et qu'on veut l'inverser, alors le "et" devient un "ou" => non (A et B) = non(A) ou non (B)
    Exemple: nombre compris entre 1 et 5 => n >= 1 et n <= 5
    L'inverse: nombre pas compris entre 1 et 5 => n < 1 ou n > 5

    Et quand on a une expression avec des "ou", style A ou B et qu'on veut l'inverser, alors le "ou" devient un "et" => non (A et B) = non(A) ou non (B)
    Exemple: nombre pas compris entre 1 et 5 => n < 1 ou n > 5
    L'inverse: nombre compris entre 1 et 5 => n >= 1 et n <= 5

    Le développement casuistique de cette loi peut être amusant quand on arrive, dans la vie réelle, dans une zone avec plein d'interdits mais mal exprimés. Défense de faire ceci et cela peut alors être interprété comme "ne pas faire (ceci et cela)" ce qui, d'après la loi de "De Morgan" peut se traduire en "(ne pas faire ceci) ou (ne pas faire cela)" ce qui signifie alors qu'on peut faire l'un si on ne fait pas l'autre.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/01/2011, 18h16
  2. [Liste Erreurs Oracle] Où la trouver ?
    Par poc dans le forum Oracle
    Réponses: 3
    Dernier message: 06/02/2006, 14h41
  3. [SAX] Erreur pour trouver la DTD d'un fichier XML parsé!
    Par gdawirs dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 14/01/2006, 15h28
  4. [Erreur]impossible de trouver le fichier de config du moteur
    Par julietteste dans le forum Bases de données
    Réponses: 5
    Dernier message: 10/05/2005, 18h34
  5. pas moyen de trouver l'erreur de ce code Javascript !!!
    Par NATHW dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2004, 21h47

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