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 :

[debutant]Probleme avec prog traitant de matrice et fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Battosaiii
    Invité(e)
    Par défaut [debutant]Probleme avec prog traitant de matrice et fichiers
    J'ai encore un probleme avec 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
     
    void matrix_load (char const *file_name, float t[8][8])
    {
       FILE *fpfile = fopen (file_name, "r");
     
       if (fpfile != NULL)
       {
          int i = 0;
     
          //  Stop on end of file or error  
          char ligne[32];
          while (i < 8 && fgets (ligne, sizeof ligne, fpfile) != NULL)
          {
             // We read the input file 
             float a[8];
             int n = sscanf (ligne, "%f %f %f %f %f %f %f %f"
                       ,&a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7]);
            //fscanf (fpfile, "%f %f %f %f %f %f %f %f"
              //         ,&a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7]);
     
             if (n == 8)
             {
                int j;
     
                for (j = 0; j < 8; j++)
                {
                   t[i][j] = a[j];
    			   printf("la valeur a[j] : %f \n",a[j]);
                }
                i++;
             }
             else
             {
                break;
             }
          }
       }
       else
       {
          fprintf (stderr, "Error in load_block(): could not open file %s!\n", file_name);
          exit (EXIT_SUCCESS);
       }
    }
    Suivant le fichier que je lui donne en entree avec differentes valeurs soient il marche bien soit il donne des valeurs errones.
    En effet dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    float t[8][8];
    matrix_load(file_name1,t);
     
    /** display t **/
    int i,j;
    for(i=0;i<8;i++)
    {		
    	for(j=0;j<8;j++)
    	{
         printf ("%4f ", t[i][j]);
    	}
    printf ("\n");
    }
    si je lui donne ce fichier :

    0 255 255 255 255 255 255 255
    1 255 255 255 255 255 255 255
    2 255 255 255 255 255 255 255
    3 255 255 255 255 255 255 255
    4 255 255 255 255 255 255 255
    5 255 255 255 255 255 255 255
    6 255 255 255 255 255 255 255
    7 255 255 255 255 255 255 255
    il affiche correctement ces valeurs .

    En revanche avec ce fichier :
    0 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255

    il m'affiche :

    0.000000 255.000000 255.000000 255.000000 255.000000 255.000000 255.000000 255.0
    00000
    255.000000 255.000000 255.000000 255.000000 255.000000 255.000000 255.000000 255
    .000000
    0.000000 0.000000 167581756884223262720.000000 0.000000 167581932806083706880.00
    0000 0.000000 0.000000 148978882159369519104.000000
    172378090487372840960.000000 167581756884223262720.000000 0.000000 6025427890444
    525582814466345021734912.000000 0.000000 0.000000 167581756884223262720.000000 0
    .000000
    172321566793612132352.000000 163866287191642603520.000000 0.000000 1489802191655
    08894720.000000 0.000000 0.000000 0.000000 153015004626981748736.000000
    167581756884223262720.000000 6048254474802835309647217479640940544.000000 0.0000
    00 6048201233477625724012354618106314752.000000 164654487495176617984.000000 Na
    N 0.000000 0.000000
    0.000000 0.000000 0.000000 163444197871878930432.000000 164196457339324203008.00
    0000 0.000000 8964825044814038327384685068419072.000000 0.000000
    0.000000 163866287191642603520.000000 0.000000 162247331086533132288.000000 0.00
    0000 147871471640059576320.000000 0.000000 0.000000
    je pete un cable .... Que faire ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Le problème est que ton fichier contient en fait des entiers et non des floats, le problème peut venir de là (sans garantie).
    Tu as essayé de lire des entiers pour voir si les deux fichiers étaient corrects ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Salut,

    Le problème est sûrement lié au décalage de ton 0, il faudrait avoir une longueur de ligne fixe car ton programme s'attend à une ligne de 32 caractères.

    Une ligne comme ça plutot fonctionnerait mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      0 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255 
    255 255 255 255 255 255 255 255
    Et il faudrait que tu changes:


  4. #4
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Deja pour eviter un affichage avec une trainee de '0' tu peux formatter ton printf() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%.0f ", t[i][j]);

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    en faite il y avait un peu de tout comme erreur. J'ai mis char[132].
    un de mes fichier n'etaient pas un 8*8 ... Pour les autres ils etaient bien 8*8 mais char[132] a regle le probleme.

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    c'est une blague ?

  7. #7
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Oh quelle solution elegante !

    Y'as pas un smiley porc ? :porc:

    Ou cochon ? :cochon:

    Bon, plus gentiment :

    Ce genre de solution est acceptable si et seulement si tu dois rendre un projet a un prof dans la demi-heure qui suit. Et encore tu peux trouver le courage de lui dire "Scuzez moi mais y'a un vieux bug que j'ai pas reussi a corriger.".
    Avec un peu de chance il te dit ce que c'est et tu en tire profit...

    La solution que tu viens de pondre c'est :
    Citation Envoyé par Un programmeur rate qui s'est lance dans l'industrie automobile
    "On a concu la nouvelle voiture citadine de vos reves. Par contre on a un probleme de fuite d'huile qu'on a pas reussi a regler. Ce qui explique la presence d'un deuxieme reservoir de 50L a cote de celui pour le carburant. Vous comprendrez on en est sur...".

  8. #8
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Citation Envoyé par Battosaiii
    en faite il y avait un peu de tout comme erreur.
    j'adore

    as-tu essayé ce que propose Trap D ?
    Tu as essayé de lire des entiers pour voir si les deux fichiers étaient corrects ?
    cette proposition a peut-être plus de chance de marcher que d'essayer plusieurs tailles de tableau pour voir celle qui passe.

  9. #9
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    J'ai un si tu veux.
    Ah tiens, j'ai trouvé : !

    Plus sérieusement :

    Le problème me parrait dû au décalage, et au fait qu'il lit 32 chars à chaque passage. Le truc que je ne comprend pas, c'est étant donné le jeu de données qu'il fournit, je ne vois pas du tout comment mettre en char[132] peut améliorer quoique ce soit, du coup son programme ne marchera pas comme il le souhaite, c'est à dire obtenir la même cassure ligne/valeurs... Mais si il a obtenu ce qu'il souhaitait, génial pour lui

  10. #10
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par KiLVaiDeN
    J'ai un si tu veux.
    Ah tiens, j'ai trouvé : !
    Merci beaucoup je la range dans un coin pour plus tard.

  11. #11
    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 Jack_serious
    Oh quelle solution elegante !

    Y'as pas un smiley porc ? :porc:

    Ou cochon ? :cochon:

  12. #12
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut,

    Pour lire des floats, ne faudrait-il pas mettre le point ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      0.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    255.0 255.0 255.0 255.0 255.0 255.0 255.0 255.0
    J'ai pas essayé, mais cela me paraît plus logique.

    bye, heuu...dsl, gruik gruik ;o)

Discussions similaires

  1. [Debutant] Probleme avec BevelBorder
    Par devil26 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 09/05/2005, 09h41
  2. [debutant]probleme avec wxwidgets
    Par iwky dans le forum wxWidgets
    Réponses: 11
    Dernier message: 23/01/2005, 20h23
  3. [DEBUTANT] Probleme avec glortho
    Par barthelv dans le forum OpenGL
    Réponses: 12
    Dernier message: 23/11/2004, 14h21
  4. [DEBUTANT] probleme avec split ?
    Par matN59 dans le forum ASP
    Réponses: 6
    Dernier message: 23/10/2004, 15h47
  5. Réponses: 2
    Dernier message: 31/08/2004, 11h45

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