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 :

Récupérer la valeur de retour de fgetc() dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Par défaut Récupérer la valeur de retour de fgetc() dans un tableau
    Bonjour, j'aimerais récupérer la valeur de fgetc() dans un tableau mais la valeur se réécrit à chaque fois, je ne vois pas mon erreur... Et ainsi je pourrais boucler sur le tableau et afficher la valeur en hexadécimale et en ASCII.
    Merci d'avance pour l'aide.

    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 <ctype.h>
     
     
    int main(void) {
        FILE * file = fopen("test2.txt", "r");
        int tab[23];
        int compteur =0;
        int valeurDecimale;
        char c = fgetc(file);
        while(c != EOF){
            // c = fgetc(Fp);
            if(isprint(c)!=0){
                //printf("ok caractere imprimable\n");
                printf("valeur décimale : %d\n",c);
                printf("caractère ascii : %c\n",c);
                printf("valeur hex: %02x\n", c);
                printf("\n");
     
     
            }else{
                printf("le caractère n'est pas imprimable\n");
            }
            valeurDecimale = c;
     
            for(int i = 0; i < 23; i++){
                tab[i] = valeurDecimale;
            }
            c = getc(file);
            compteur++;
        }
        printf("\n");
        printf("tableau\n");
        for(int i = 0; i < 23; i++){
            printf("valeur dans le tableau : %d\n", tab[i]);
        }
     
        fclose(file);
     
        return EXIT_SUCCESS;
    }
    Retour du terminal :
    valeur décimale : 98
    caractère ascii : b
    valeur hex: 62

    valeur décimale : 111
    caractère ascii : o
    valeur hex: 6f

    valeur décimale : 110
    caractère ascii : n
    valeur hex: 6e

    valeur décimale : 106
    caractère ascii : j
    valeur hex: 6a

    valeur décimale : 111
    caractère ascii : o
    valeur hex: 6f

    valeur décimale : 117
    caractère ascii : u
    valeur hex: 75

    valeur décimale : 114
    caractère ascii : r
    valeur hex: 72

    le caractère n'est pas imprimable

    tableau
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10
    valeur dans le tableau : 10

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    c'est très très visible

    Tu supprimes ta variable valeurDecimale et ta boucle pour (en gros les lignes 27 à 31 incluses) et tu mets tab[compteur] = c;.

    Et au passage tu peux faire 1 printf de bourrin printf("valeur décimale : %d\ncaractère ascii : %c\nvaleur hex: %02x\n\n", c, c, c);

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par vyliana17 Voir le message
    mais la valeur se réécrit à chaque fois, je ne vois pas mon erreur...
    Ben si à chaque saisie fgetc() tu remplis tout le tableau avec ta boucle...

    Accessoirement fgetc() ne renvoie pas un char mais un int. Cela permet de faire la différence entre le caractère ascii 255 (0x00FF) et la valeur EOF (0xFFFF). De plus l'instruction valeurDecimale=c n'apporte absolument aucune plus-value à ton code.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Salut,

    fgetc retourne un int, c'est pour la prise en charge de EOF.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int c;
    while ((c = fgetc(file)) != EOF) {
        // faire ce que tu veux de c ....

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Par défaut
    Merci pour vos réponses aimables

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/07/2016, 13h17
  2. Réponses: 17
    Dernier message: 11/10/2012, 18h27
  3. Réponses: 7
    Dernier message: 28/10/2010, 21h55
  4. Réponses: 5
    Dernier message: 17/07/2008, 09h18
  5. Réponses: 2
    Dernier message: 17/06/2005, 13h38

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