• # Code bon :)

    Posté par . En réponse au message Mettre un fichier dans une matrice. Évalué à 5.

    J'ai suivi vos conseils, et est donc le code suivant :


    int main(int argc, char *argv[])
    {
    int grille[11][11],i=0,j=0,m=0;
    char caractereActuel;
    for (i=0;i<=10;i++)
    {
    for (j=0;j<=10;j++)
    {
    grille[i][j]=0;
    }
    }

    FILE* fichier = NULL;
    //Réinitialisation des variables
    i=0;
    j=0;
    fichier = fopen("fichieraouvrir", "r+");

    if (fichier != NULL)
    {
    do
    {
    for(j=0;j<=5;j++)
    {
    caractereActuel= fgetc(fichier); // On lit le caractère
    m=caractereActuel-'0';
    printf("i = %d, j = %d, m = %d \n",i,j,m);
    //sprintf(intermediaire,"%c",caractereActuel);
    if (m==-38) //Si l'entier est un retour à la ligne, on change de ligne
    {
    i++;
    }
    else //Si non, on l'écrit a sa place dans la matrice
    {
    grille[i][j]=m;
    }
    }
    } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)

    fclose(fichier); // On ferme le fichier qui a été ouvert
    }

    else
    {
    // On affiche un message d'erreur si on veut
    printf("Impossible d'ouvrir le fichier test.txt");
    }
    printf("\nAffichage de la matrice ... \n");
    for (i=0;i<5;i++)
    {
    for (j=0;j<5;j++)
    {
    printf("%d ",grille[i][j]);
    }
    printf("\n");
    }
    printf("\n");

    return 0;
    }



    Qui fontionne bien comme il faut :) Je me suis pris la tete avec atoi(), mais je n'en ai visiblement pas besoin :)
    Aussi, je n'avais pas réaliser que je liser les caracteres colones par colones, et non ligne par ligne. Je règle ce problème en bouclant sur j, et non sur i.
    Est ce que ce code est potable, ou alors je peut l'améliorer ? Je pense notamment au changement de ligne ... vous auriez fait comme moi ? ou autrement ?

    Merci de votre aide en tout cas :)