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 :

Caractères fichier texte dans une matrice


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Caractères fichier texte dans une matrice
    bonjour,

    voilà mon problème:

    j'ai un fichier texte de 7 lignes et 5 colonnes qui contient uniquement des 0 et des 1, cela représente un caractère.

    par exemple pour un A j'ai :

    11111
    10001
    10001
    11111
    10001
    10001
    10001


    Je veux lire mon fichier texte et stocker les 0 et les 1 dans une matrice 7*5 pour pouvoir l'afficher.

    Je ne comprend pas pourquoi lorsque j'execute mon code il rempli la matrice n'importe comment, j'ai des 48 et des 49 alors que je ne devrais avoir que des 0 et des 1.

    Voilà mon code: (je ne copie mas 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
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    void afficherCaract(char lettre)
    {
     
          FILE* fichier ;
          fichier = fopen("a.txt", "r");
        int caractereActuel = 0;
        int matrix[7][5];
        int i=0;
        int j=0;
     
        if (fichier != NULL)
        { 
     
            do
            {
                caractereActuel = fgetc(fichier); // On lit le caractère
                printf("%c",caractereActuel);
                matrix[i][j]=caractereActuel;
                printf("int 'j' = %d\n",j);
                printf("int 'i' = %d\n",i);
                j++;
     
                if((j==4)&&(i!=6))
                {
                       i++;
                       j=0;
                }
                if((j==4)&&(i==6)){
                       j=0;
                       }            
     
     
            } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
     
            fclose(fichier);
        }
     
        for(i=0;i<7;i++){
                     for(j=0;j<4;j++){
                    printf("int 'matrix[i][j]' = %d\n",matrix[i][j]);
     
                     printf("\n");
                     }
    } 
    }

    MERCI PAR AVANCE.

    Cordiallement

    Voilà

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Je ne comprend pas pourquoi lorsque j'execute mon code il rempli la matrice n'importe comment, j'ai des 48 et des 49 alors que je ne devrais avoir que des 0 et des 1.
    Effectivement, il y a un piège : tu confonds caractère et nombre.

    le nombre 0 a pour valeur 0
    le nombre 1 a pour valeur 1
    le caractère '0' a pour valeur 48
    le caractère '1' a pour valeur 49

    Une solution serait d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    caractereActuel = fgetc(fichier); /* On lit le caractère */
    printf("%c",caractereActuel);
     
    switch(caractereActuel){
      default:
      case '0':
        matrix[i][j] = 0;
        break;
      case '1':
        matrix[i][j] = 1;
        break;
    }
    PS : merci de penser à la balise code.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Effectivement, il y a un piège : tu confonds caractère et nombre.

    le nombre 0 a pour valeur 0
    le nombre 1 a pour valeur 1
    le caractère '0' a pour valeur 48
    le caractère '1' a pour valeur 49

    Une solution serait d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    caractereActuel = fgetc(fichier); /* On lit le caractère */
    printf("%c",caractereActuel);
     
    switch(caractereActuel){
      default:
      case '0':
        matrix[i][j] = 0;
        break;
      case '1':
        matrix[i][j] = 1;
        break;
    }
    ou de manière plus concise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    caractereActuel = fgetc(fichier);
    printf("%c",caractereActuel);
    matrix[i][j]=caractereActuel - 48;
    48 étant la valeur décimale du caractère '0'. Cette méthode se montre néanmoins problématique car tu ne contrôles pas ce que tu lis, c'est donc la porte ouverte !!
    Stay in touch

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par oLie93 Voir le message
    ou de manière plus concise:
    Code :
    [...]
    48 étant la valeur décimale du caractère '0'. Cette méthode se montre néanmoins problématique car tu ne contrôles pas ce que tu lis, c'est donc la porte ouverte !!
    Justement, si un risque existe, on tente de le faire disparaitre.

    De plus, il est mieux d'éviter les de mettre directement le code ascii du caractère 0 dans le source. A la place il faut privilégier '0' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matrix[i][j]=caractereActuel - '0';

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/02/2013, 22h33
  2. [Débutant] Charger un fichier texte dans une matrice de nombres (fonction load).
    Par Invité dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/07/2010, 16h54
  3. Réponses: 6
    Dernier message: 30/05/2006, 11h41
  4. [FB 1.5] ouvrir fichier texte dans une ps
    Par jlf dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2005, 20h29
  5. Insertion d'un fichier texte dans une moulinette PL/SQL
    Par Douanier007 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 24/01/2005, 16h08

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