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 :

Lire et Ecrire un tableau à partir de deux tableaux existant


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut Lire et Ecrire un tableau à partir de deux tableaux existant
    Bonjour,

    Etant novice dans la programmation en C, je me permets de solliciter votre aide.
    Mon problème est le suivant:

    - Au départ, j'ai deux tableaux de même taille: n x 3. Chaque tableau se trouve dans un fichier. Notons les : A.txt et B.txt.
    Avec:
    A
    i ai1 ai2

    B
    i bi1 bi2

    i variant entre 1 et n.

    - A la arrivée, je souhaiterais obtenir un troisième fichier C tel que :

    C
    i ci1 ci2

    Avec cij = aij + bij.

    ------------------------------------------------------
    Une première approche pour ce problème est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    main ()
    {
      FILE * entree1;
      FILE * entree2;
      FILE * sortie;
     
      entree1 = fopen ("A.txt",  "r");
      entree2 = fopen ("B.txt",  "r");
      sortie  = fopen ("C.txt", "w");
     }
    ---------------------------------------------------------
    Comment peut-on lire A et B et les mettre en relation avec C?

    Merci d'avance,

    Tawada

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il suffit d'ouvrir tes fichiers comme tu l'as fait... Lire les éléments de A et B et les additionner avant de les réécrire dans le fichier C...

    Pour lire/écrire dans un fichier, il faut utiliser: fread/fwrite.

    Jc

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Merci Jc pour ta réponse.

    J'ai suivi ton conseil. Voici ce que j'ai testé pour ouvrir et lire A.
    -------------------------------------------------
    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>
    main ()
    {
      int n;
      FILE * entree1;
       entree1 = fopen ("A.txt",  "rt");
     
      while (fread (&n, sizeof(int), 1, entree1), !feof(entree1))
     
       printf("%d \n", n);
     
      fclose (entree1);
    }
    ----------------------------------------
    Avec
    A
    1 10 20

    Lorsque j'exécute le programme, j'ai comme résultat:
    808519985
    154153481

    Je ne ne comprends pas!!!
    Comment je peux accéder aux éléments de A?

  4. #4
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Comme tu lis du binaire (fread), il ne faut pas ouvrir en mode texte (qui est d'ailleurs par défaut, pas de "rt") mais en mode binaire ("rb").
    Mais comment est organisé ce fichier, est-il lisible par un éditeur de texte ? Si oui il faut ouvrir en mode texte et utiliser fgets.
    Je viens de lire plus attentivement ton dernier post, il faut effectivement utliser fgets et aller chercher les différents nombres en utilisanbt conjointement strtok et strtol. regarde les docs à ce sujet.
    "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

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Trap D
    Comme tu lis du binaire (fread), il ne faut pas ouvrir en mode texte (qui est d'ailleurs par défaut, pas de "rt") mais en mode binaire ("rb").
    Mais comment est organisé ce fichier, est-il lisible par un éditeur de texte ? Si oui il faut ouvrir en mode texte et utiliser fgets.
    Je viens de lire plus attentivement ton dernier post, il faut effectivement utliser fgets et aller chercher les différents nombres en utilisanbt conjointement strtok et strtol. regarde les docs à ce sujet.
    Exact, j'avais lu Autant pour moi...

    Jc

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Lire et Ecrire un tableau à partir de deux tableaux exis
    Citation Envoyé par tawada
    Comment peut-on lire A et B et les mettre en relation avec C?
    Ouvrir ton livre de C au chapitre 'I/O' et apprendre à te servir des fonctions de fichier.

    En supposant que tu as un fichier texte :

    Lecture : fgets() + la fonction de conversion qui va bien
    Ecriture fprintf()

    Compléments : (ne remplace pas ton livre de C)

    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Merci bien à tous les trois..
    Je réponderai dès que j'ai quelque choses..

  8. #8
    Expert éminent
    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 : 38
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    De plus, n'oublie pas de tester le retour de toutes ces fonctions, en commençant par vérifier si le fichier a bien été ouvert, pour ne pas avoir à faire de lectures ou écritures sur des fichiers qui n'ont pas pu être ouvert.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Bonjour!

    Voilà, grâce à vos conseils je commence à trouver des choses (et surtout à les comprendre ;-) ).
    Néanmoins, restent pas de choses à faire. Je vous serai reconnaissant de me guider.
    ----------------------------------------------
    Trap D a écrit:
    ... il faut effectivement utliser fgets et aller chercher les différents nombres en utilisanbt conjointement strtok et strtol...
    Bon, voici ce que ça donne :

    -----------------------------
    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
    #include <stdio.h>
    #define TAILLE_MAX 100
    main ()
    {
      char a[TAILLE_MAX];
      FILE * entreeA;
      char *A;
      int cpt = 0;
      long r;
      entreeA = fopen ("F1.txt",  "rb");
     
      while (!feof(entreeA))
        {
          fgets(a,TAILLE_MAX, entreeA);    //enregistre une ligne dans a
          r = strtol(a, &A, 10);    // ?
          printf("%s \n", a);
          printf("%s \n", A);
          printf("%d \n", r);
          cpt++;
        }
      fclose (entreeA);
    }
    ------------------------------------------------
    Exemple d'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                 A.txt
    1	10	20	30
    2	0.1	0.2	0.3
    ----------------------------------------------
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    1       10      20      30
     
            10      20      30
     
    1
    2       0.1     0.2     0.3
            0.1     0.2     0.3
    2
    ------------------------------------------------
    Dans le code précédent, je n'ai pas utilisé strtok comme le conseille Trap D.
    Pour la simple raison que je ne sais pas comment l'intégrer!
    Le but est d'extraire les nombres de chaque ligne de A (grâce à fgets). On voit bien
    que ce n'est pas gagné avec r = strtol(a, &A, 10); vu le resultat.

    J'ai essayé atoi dans le code suivant:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 100
    main ()
    {
      char a[TAILLE_MAX];
      FILE * entreeA;
      char *A;
      int cpt = 0;
      long r;
     
      int j = 0;
      int  n;
     
      entreeA = fopen ("A.txt",  "rb");
     
      while (!feof(entreeA))
        {
          fgets(a,TAILLE_MAX, entreeA); //stoke une ligne dans a
          r = strtol(a, &A, 10); 
     
           while (a[j])
    	{
    	  putchar(a[j]);
    	  n = atoi(a[j]);
    	  j++;
    	}
           j = 0;
           cpt++;
        }
      printf ("\n");
      fclose (entreeA);
     
    }
    -----------------------------
    Exemple: idem que A.txt
    ----------------------------
    Resultat:
    ça ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Prg_10.c: In function `main':
    Prg_10.c:25: warning: passing arg 1 of `atoi' makes pointer from integer without a cast
    1       10      20      30
    2       0.1     0.2     0.3
    -----------------------------------------

    Là vraiment votre aide sera précieuse!!
    Merci d'avance,

    Tawada

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tawada
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      FILE * entreeA;
     
      entreeA = fopen ("F1.txt",  "rb");
     
      while (!feof(entreeA))
    Quels sont les mots que tu ne comprends pas dans
    De plus, n'oublie pas de tester le retour de toutes ces fonctions, en commençant par vérifier si le fichier a bien été ouvert
    D'autre part, je t'ai passé un lien expliquant comment utiliser fgets() et le rôle de feof(). Tu as fais exactement ce qu'il ne faut pas faire. C'est très fort. Tu ne tiens absolument pas compte des conseils reçus. On parle aux murs ou quoi ?
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Ok, Delahaye!
    J'ai rajouté ce-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(( entreeA= open("A.txt", "r"))==NULL){
        exit(1);
       }
    Par ailleurs, ce n'est pas que je suis têtu, mais j'ai aussi oublié de changer "rb" par "rt". Chose faite maintenant..

    On y arrivera un jour.. :-)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tawada
    J'ai rajouté ce-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(( entreeA= open("A.txt", "r"))==NULL){
        exit(1);
       }
    C'est quoi ce 'open()' ? Un peu plus de rigueur et de relecture ne fera pas de mal...

    Les valeurs portables pour exit() sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0 (OK)
    EXIT_SUCCESS
    EXIT_FAILURE
    Je recommande de ne pas combiner affectation et test. Ca rend le code inutilement difficile à lire et à maintenir. D'autre part, exit() , c'est brutal...
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       int ret = EXIT_SUCCESS;
       FILE *entreeA = fopen ("A.txt", "r");
     
       if (entreeA != NULL)
       {
          /* traitement normal */
     
          fclose (entreeA), entreeA = NULL; /* EDIT */
       } 
       else
       {
          ret = EXIT_FAILURE;
       }
       return ret;
    }
    EDIT : J'ai ajouté une ligne importante par sa fonction et son emplacement. En effet, il faut fermer le fichier mais seulement si il est ouvert (fclose(NULL) invoque un comportement indéfini).
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Voilà, j'ai bien suivi vos conseils, qui m'étaient de grand secour pour débutant en C que je suis, et j'obtient ce-ci :
    ------------------------------------------------------------
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main ()
    {
      double tabA[50][50];
      int ret, i, j; 
      FILE *entreeA ;
      char ligneA[50];
      char ligne[50];
      char *p;
      char sep[20];
     
      strcpy(sep,"\t "); 
      ret = EXIT_SUCCESS;
      entreeA = fopen ("A.txt", "r");
         i = 0; j = 0;
     
      if (entreeA != NULL)
        {
     
          while (fgets(ligneA, sizeof(ligneA), entreeA) != NULL)
    	{
    	  strcpy(ligne,ligneA); 
    	  p = strtok(ligne, sep);
    	  do {
               tabA[i][j]=atof(p);
    	    printf("tabA[%d][%d] vaut %lf\n",i,j,tabA[i][j]);
    	    p = strtok(NULL, sep);
    	    j++;
    	  }while(p != NULL);
    	  j = 0;
    	  i++;
    	}
        }
      else
        {
          ret = EXIT_FAILURE;
        }
       fclose (entreeA);
      return ret;
      }
    -----------------------------
    Pour :
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tabA[0][0] vaut 1.000000
    tabA[0][1] vaut 10.000000
    tabA[1][0] vaut 2.000000
    tabA[1][1] vaut 0.100000
    -------------------------------
    Si vous êtes d'accord sur cette version, je passe à l'étape suivante qui consiste à faire la même chose avec B.txt (voir l'énoncé du problème), ensuite faire les bonnes opérations sur les a[i][j][k] et b[i][j][k] et faire un fprint pour obtenir C.txt.

    J'attends vos commentaires.
    Merci,

    Tawada

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    oups, je voulais dire : fprintf()

    Tawada

  15. #15
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Premièrement, tu fermes ton fichier même si l'ouverture a échoué, il faudrait mettre le fclose à la fin du if.

    Ensuite, il vaut mieux utiliser strtof que la combinaison atof et strtok ou alors encore mieux strtod...

    Finalement, tu ne testes pas si tu sors du tableau. Imagine une ligne avec plus de 50 éléments, cela peut poser problème. Une solution est de changer ton format de fichier et mettre la taille au début, soit dans A.txt:

    2 2
    1 10
    2 0.1
    Cela permettrait même d'allouer dynamiquement le tableau à la place de devoir déclarer un tableau beaucoup trop grand...

    Jc

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    - le fclose à la fin du if est fait,

    - sûr pour strtof au lieu de atof et strtok? je veux dire, puisque la combinaison des deux dernières fonctions marche, alors pourquoi je dois changer?

    - est-ce que je peux avoir un exemple pour tester si je ne sors pas du tableau?

  17. #17
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par tawada
    - sûr pour strtof au lieu de atof et strtok? je veux dire, puisque la combinaison des deux dernières fonctions marche, alors pourquoi je dois changer?
    L'utilisation de strtok est déconseillé du fait qu'il change l'argument qui est passé. Je ne dis pas qu'il faudrait à tout pris le changer mais l'utilisation de strtof est recommandé surtout pour un débutant.

    Ensuite, pour la question de atof, c'est lorsqu'il y a un problème avec l'entrée (comme pour scanf en fait) que les problèmes arrivent. Je viens de lire d'ailleurs que strtof n'est pas ANSI-C mais strtod l'est. Donc il faut préférer strtod.

    - est-ce que je peux avoir un exemple pour tester si je ne sors pas du tableau?
    Il suffit de rajouter quelques tests:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #define N 50
    ... 
    double tabA[N][N];
    ...
    while ((i<N)&&(fgets(ligneA, sizeof(ligneA), entreeA) != NULL) )
    {
     ... 
     do
      {
      ..
     }while((j<N)&&(p!=NULL));
    }
    Jc[/code]

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Merci Jc.
    Je vais regarder de plus près comment je peux utiliser strtof..

    Tawada

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    J'ai rajouté strtof comme ce-ci :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main ()
    {
      double tabA[50][50];
      int ret, i, j; 
      FILE *entreeA ;
      char ligneA[50];
      char ligne[50];
      char *p;
      char sep[20];
     
      strcpy(sep,"\t "); 
      ret = EXIT_SUCCESS;
      entreeA = fopen ("A.txt", "r");
         i = 0; j = 0;
     
      if (entreeA != NULL)
        {
          while (fgets(ligneA, sizeof(ligneA), entreeA) != NULL)
    	{
    	  strcpy(ligne,ligneA); 
    	  printf ("%s \n", ligne);
    	  tabA[i][j]= strtod (ligne, NULL);  ;
    	  printf("tabA[%d][%d] vaut %lf\n",i,j,tabA[i][j]);
    	  j++;    
    	  i++;
    	}
          fclose (entreeA);
        }
      else
        {
          ret = EXIT_FAILURE;
        }
      return ret;
     
    }

    -------------------
    Resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1       10
     
    tabA[0][0] vaut 1.000000
    2       20
    tabA[1][1] vaut 2.000000
    ---------------
    Ce qui n'est pas correcte!
    Mais où est le problème?!!!!!!

    Tawada

    PS: Jc, je rejouterai le test dès que j'ai quelque chose qui marche avec strtod

  20. #20
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut faire attention à l'utilisation d'une fonction avant de s'en servir

    Voici une solution

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main ()
    {
      double tabA[50][50],tmp;
      int ret, i, j;
      FILE *entreeA ;
      char ligneA[50];
     
      char *p;
      char sep[20];
      char *start,*end;
     
      strcpy(sep,"\t ");
      ret = EXIT_SUCCESS;
      entreeA = fopen ("A.txt", "r");
         i = 0; j = 0;
     
      if (entreeA != NULL)
        {
          while (fgets(ligneA, sizeof(ligneA), entreeA) != NULL)
       {
         end = ligneA;
         j=0;
         do
         {
         start=end;
         tmp = strtod (start, &end);
     
         if(start!=end)
           {
           tabA[i][j] = tmp;
           printf("tabA[%d][%d] vaut %lf\n",i,j,tabA[i][j]);
           }
         j++;   
         }while(end!=start);
         i++;
       }
          fclose (entreeA);
        }
      else
        {
          ret = EXIT_FAILURE;
        }
      return ret;
     
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [Python 2.X] Obtention de Graphe en 3D à partir de deux tableaux Nx1 et d'un tableau NxN
    Par cosupoka dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/11/2014, 19h38
  2. Tableau associatif à partir de deux tableaux
    Par faitor1 dans le forum Langage
    Réponses: 2
    Dernier message: 05/09/2014, 14h44
  3. Remplir un hash à partir de deux tableaux
    Par USMC666 dans le forum Langage
    Réponses: 11
    Dernier message: 21/10/2013, 09h36
  4. Faire un tableau à partir de 2 tableaux
    Par identifiant_bidon dans le forum Langage
    Réponses: 3
    Dernier message: 09/09/2011, 22h27
  5. [Tableaux] créer un tableau à partir de deux autres
    Par spaukensen dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 16h22

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