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 :

[C ANSI] Problème de lecture dans un fichier


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut [C ANSI] Problème de lecture dans un fichier
    Bonjour
    Je crée un fichier pour sauvegarder un état dans un jeu.
    Aucun problème mais lorsque je veux le lire, j'ai besoin de stocker mes valeurs dans des tableaux je procède de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    lignes = atoi(fgets(ligne,sizeof(ligne),fp));
    colonnes = atoi(fgets(ligne,sizeof(ligne),fp));
     
    for(i=0;i<*l;i++)
    	for(j=0;j<*c;j++)
    	{
    		tableau1[i][j] = atoi(fgets(ligne,sizeof(ligne),fp));
    		tableau2[i][j] = atoi(fgets(ligne,sizeof(ligne),fp));
    	}
    Pour les deux premières lignes aucun problème mais au moment d'entrer les valeurs dans le tableau "Bus error"

    Quelqu'un aurait il une idée ?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Probablement que la place réservée dans les tableaux est incorrecte. Ca dépend des valeurs de *l et *c

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    J'ai essayé de cette façon mais sans résultat à nouveau :

    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
     
    char ** tableau1;
    char ** tableau2;
     
    .....
     
    lignes = atoi(fgets(ligne,sizeof(ligne),fp));
    colonnes = atoi(fgets(ligne,sizeof(ligne),fp));
     
    tableau1 = malloc(lignes*colonnes*sizeof(char));
    tableau2 = malloc(lignes*colonnes*sizeof(char));
     
    for(i=0;i<lignes;i++)
    	for(j=0;j<colonnes;j++)
    	{
    		tableau1[i][j] = atoi(fgets(ligne,sizeof(ligne),fp));
    		tableau2[i][j] = atoi(fgets(ligne,sizeof(ligne),fp));
    	}
    Pourtant il y a bien le nombre de lignes suffisantes dans le fichier de sauvegarde, je ne comprend pas.

  4. #4
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    il ressemble à quoi ton fichier texte ?

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    9
    9
    48
    46
    49
    111
    49
    111
    48
    46
    49
    46
    ...
    Les deux premières lignes contiennent le nombre de lignes et de colonnes. Les lignes suivantes sont le contenue des matrices.

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Les types sont incorrects
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char ** tableau1;
    char ** tableau2;
    .....
    tableau1 = malloc(lignes*colonnes*sizeof(char));
    tableau2 = malloc(lignes*colonnes*sizeof(char));
    tableau1/2 ne sont pas des tableaux de pointeurs sur char, mais des tableaux de char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * tableau1;
    char * tableau2;
    .....
    tableau1 = malloc(lignes*colonnes);
    tableau2 = malloc(lignes*colonnes);
    Avec cette définition (char*), il n'est évidemment pas possible d'écrire tableau1[i][j], puisque tableau1/2 sont à une dimension. Dans ce cas , il faut calculer l'idice soi-même : tableau1[i*colonnes+j]

    Une méthode pour pouvoir conserver la notation tableau1[i][j] est montrée ici dans la FAQ

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Oui je venais de trouver mon erreur j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    tableau1 = malloc(lignes*colonnes);
    tableau2 = malloc(lignes*colonnes);
    for(i=0;i<colonnes;i++)
    {
    tableau1[i] = malloc(colonnes*sizeof(char));
    tableau2[i] = malloc(colonnes*sizeof(char));
    }
    Merci de vos réponses

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par F0ul Voir le message
    Oui je venais de trouver mon erreur j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    tableau1 = malloc(lignes*colonnes);
    tableau2 = malloc(lignes*colonnes);
    for(i=0;i<colonnes;i++)
    {
    tableau1[i] = malloc(colonnes*sizeof(char));
    tableau2[i] = malloc(colonnes*sizeof(char));
    }
    Merci de vos réponses
    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char ** tableau1;
    char ** tableau2;
    ....
    tableau1 = malloc(lignes*sizeof(char*));
    tableau2 = malloc(lignes*sizeof(char*));
    for(i=0;i<lignes;i++)
    {
    tableau1[i] = malloc(colonnes*sizeof(char));
    tableau2[i] = malloc(colonnes*sizeof(char));
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de lecture dans un fichier
    Par Psycha dans le forum Qt
    Réponses: 17
    Dernier message: 17/06/2009, 11h48
  2. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  3. Problème de lecture dans un fichier texte.
    Par Mike888 dans le forum C
    Réponses: 3
    Dernier message: 24/05/2007, 11h45
  4. problème de lecture dans un fichier
    Par phy4me dans le forum Fortran
    Réponses: 1
    Dernier message: 20/05/2007, 20h55
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13

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