Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture de tableau à partir d'un fichier en C

readAndCheckArrayOfArraysFromFile qui lira la taille size

    14 décembre 2018 à 20:06:05

    Définir la fonction readAndCheckArrayOfArraysFromFile qui lira la taille size ainsi que le contenu d'un tableau de tableaux à partir d'un fichier dont le nom sera passé en paramètre à la fonction. La fonction devra vérifier que le contenu du fichier est le bon (compte tenu de size). La fonction devra retourner le tableau de tableaux nouvellement créé si le fichier est correct, quittera le programme sinon.


    J'ai ce programme qui me renvoi l'erreur :


    Erruer tableau

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <limits.h>
    #include <string.h>
    #include "array.h"
    
    #define MAXLINELEN 4096
    
    int ** tab[100][100];
    /*TO BE COMPLETED*/
    int** readAndCheckArrayOfArraysFromFile(uint* p_size, char*fname){
        if(! fname || !p_size){
            fprintf(stderr,"paramètres invalides");
            exit(EXIT_FAILURE);
        }
        //unsigned l , c ;
        unsigned int i , j ;
        FILE* f  = fopen(fname,"r");
        if(!f){
            fprintf(stderr,"paramètres invalides");
            exit(EXIT_FAILURE);
        }
        char tab2[200] , *tmp;
        i = 0;
    
        while(!feof(f)){
            fscanf(f,"%s",tab2);
            tmp = strtok(tab2," ");
            j=0;
            while(tmp != NULL){
                tab[i][j] = atoi(tmp);
                tmp = strtok(NULL," ");
                j++;
            }
            i++;
        }
        return tab;
    }
    
    
    /** This main function is given as a sample and can 
     * be changed as needed for for debugging purposes
    **/
    int main() {
        srand(time(NULL));
        uint n = rand()%20;
        printf("Generating a random array of arrays of size %d\n", n);
        int **arr = createArrayOfArrays(n); // given function
        printArrayOfArrays(arr,n);
        writeArrayOfArraysInFile(arr,n,"foo");
        freeArrayOfArrays(arr,n); 
        arr=readAndCheckArrayOfArraysFromFile(&(n),"foo");
        printArrayOfArrays(arr,n);
        /*freeArrayOfArrays(arr,n);*/
        return EXIT_SUCCESS;
    }



    -
    Edité par Sozy 14 décembre 2018 à 20:08:22

    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2018 à 16:20:05

      il semblerait que le type retourné par atoi() ne corresponde pas à celui de ton tableau, je ne connais pas cette fonction mais ton tableau est de type int**, quel est le type de retour de atoi() ?
      • Partager sur Facebook
      • Partager sur Twitter
        15 décembre 2018 à 18:13:32

        Bonjour,

        Ligne 10, il y a une variable globale, c'est mal. D'autant qu'elle a le type tableau de tableaux de pointeurs sur des pointeurs qui pointent sur des int. Un type qui parait bien compliqué. Solution : supprimer ce monstre.

        Si le type de retour int** est imposé, c'est l'on a besoin de pointer sur des pointeurs sur des int. Ce qui peut se comporter comme un tableau à deux dimensions dynamiques.
        Cela implique donc de trouver quelles sont ces dimensions, le langage n'ayant pas l'option divination. Il faut les trouver.
        Le main() ne parle que d'une dimension n. Il manque des informations pour comprendre ce que cherches à faire.

        Des choses restent aussi à clarifier dans la fonction.
        Ligne 27, feof() permet de vérifier pourquoi un fichier est en erreur, or ici c'est la première utilisation du fichier, curieux.
        Ligne 28 et 29, le format %s permet d'extraire une séquence de caractères et exclut les séparateurs. D'où ligne 28, il ne sert à rien d'y rechercher des espaces, il n'y en aura certainement aucun. appeler fgets() au lieu de fscanf() pourrait être mieux.

        Ligne 32, le atoi() va bien pour trouver un nombre, il reste à le stocker dans un tableau dont on a les dimensions et qui a été réservé. Ça peut être complexe si le nombre de colonnes est dynamique (seul le fichier serait détenteur de cette information.)

        Et tes deux erreurs sont en effets dues à des types qui ne sont pas les bons. atoi() retourne un int pas un pointeur de pointeurs sur des int. et tab est un tableau de tableaux de pointeurs sur des pointeurs qui pointent sur des int alors que la fonction doit retourner un pointeur sur des pointeurs sur des int.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

        Lecture de tableau à partir d'un fichier en C

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown