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

Bibliothèque standard C Discussion :

int getc (FILE * stream)


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut int getc (FILE * stream)
    Bonsoir,

    Je souhaiterais savoir ce que l'on entend par un type FILE.

    Code :
    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
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    main()
    {
    char *chaine = "0042380 70042395:70042408 70042420:70042428";
    char C;
    long int Nb;
    char *endptr = NULL;
    Nb = 1;
    	{
    	    Nb = strtol (chaine, &endptr ,10); 
    		printf ("NB : %d\n",Nb);
                C = getc (endptr);
                printf ("caractere non lu : %s\n",C);
    	} 
    }
    Mon compilateur m'indique "attention : passing argument 1 of ‘_IO_getc’ from incompatible pointer type" sur la ligne du C = getc (endptr).
    En fait, je souhaite passer le caractère sur le lequel a bloqué la fonction strtol pour la relancer sur le restant de la chaine qui n'a pas été traitée. Je compte faire à terme une fonction récursive, qu'en pensez-vous ?

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    FILE c'est de l'anglais^^ ca veut dire fichier en francais...

    le type FILE est en fait une structure qui te permet de faire des opérations sur les fichiers (lecture et écriture), pour cela tu dispose de plusieurs fonctions définies dans stdio.h

    ne ferai pas de mal

    sinon dans ce stdio.h tu dispose de trois variable de type FILE définies par défaut dans stdio :

    --> FILE *stdin : le fichier d'entrée standard
    --> FILE *stdout : le fichier de sortie standard
    --> FILLE *stderr : le fichier de sortie standard des erreurs

    donc pas de fopen sur ces fichier !! (je l'ai déjà vu^^)

    ensuite pour la fonction getc(FILE *stream), elle te renvoie un caractère lu dans le fichier stream, si tu veut lire des données rentrées par l'utilisateur, je te conseil getchar() qui est equivalent à getc(stdin) (c'est écrit dans le man)

    Un dernier conseil : les fonctions du type strtol, sprintf, atoi et compagnie sont a éviter, d'autant plus que les réecrire ne fait pas de mal, c'est un super exercice quand tu commence le C

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par mathieubo Voir le message
    Un dernier conseil : les fonctions du type strtol, sprintf, atoi et compagnie sont a éviter, d'autant plus que les réecrire ne fait pas de mal, c'est un super exercice quand tu commence le C
    ??

  4. #4
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    Merci DaZumba pour ta réponse qui fait avancer.

    Citation :
    Ben, il suffit que endptr pointe sur le caractere suivant: endptr++. Attention a ne pas melanger un flux de donnees (comme un fichier) et une chaine de caractere. Cela n'a rien a voir.

    Je n'avais pas pensé à faire un endptr++.


    Est-il possible de rediriger mon pointeur enptr sur une variable préalablement défini en FILE et ensuite afficher mon caractère consommer? Je pose cette question, mais avant j'ai essayé. Mon compilateur m'indique "invalid lvalue in assignment"
    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
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    main()
    {
    char *chaine = "0042380 70042395:70042408 70042420:70042428";
    FILE *tempo;
    int c;
    long int Nb;
    char *endptr = NULL;
    Nb = 1;
     
    Nb = strtol (chaine, &endptr ,10);
    &tempo = endptr;
    c = fgetc (tempo);
    printf ("caractere non lu : %d\n",c);
    }
    Merci

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par raphadw Voir le message
    Est-il possible de rediriger mon pointeur enptr sur une variable préalablement défini en FILE et ensuite afficher mon caractère consommer? Je pose cette question, mais avant j'ai essayé. Mon compilateur m'indique "invalid lvalue in assignment"
    Attention a ne pas programmer au hasard quand meme. Un pointeur sur FILE ne s'obtient pas n'importe comment.
    C'est:
    - soit le retour de fopen()
    - soit un des trois flux automatiquement ouverts au chargement du programme (stdin pour le flux d'entree, stdout pour le flux de sortie normale, stderr pour le flux de sortie d'erreur).

    Dans ton cas, tu n'as pas besoin de tout cela. Tu as une chaine de caracteres (qui n'est rien d'autre qu'un tableau de caracteres termine par un '\0') et tu peux te ballader a loisir dans cette chaine, en utilisant endptr, par exemple.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mathieubo Voir le message
    Un dernier conseil : les fonctions du type strtol, sprintf, atoi et compagnie sont a éviter, d'autant plus que les réecrire ne fait pas de mal, c'est un super exercice quand tu commence le C
    Bof... ok pour éviter atoi(), mais le reste, non. Il est par contre utile d'apprendre à faire des fonctions d'entrées solides à base fgetc() ou de fgets().

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par raphadw Voir le message
    Je souhaiterais savoir ce que l'on entend par un type FILE.
    C'est un typedef defini par stdio.h.

    Mon compilateur m'indique "attention : passing argument 1 of ‘_IO_getc’ from incompatible pointer type" sur la ligne du C = getc (endptr).
    Ben oui. getc() attend un argument de type pointeur sur FILE, et tu lui envoies un pointeur sur char. Le compilateur est oblige de se plaindre.

    En fait, je souhaite passer le caractère sur le lequel a bloqué la fonction strtol pour la relancer sur le restant de la chaine qui n'a pas été traitée.
    Ben, il suffit que endptr pointe sur le caractere suivant: endptr++. Attention a ne pas melanger un flux de donnees (comme un fichier) et une chaine de caractere. Cela n'a rien a voir.

Discussions similaires

  1. Alternative à file stream ?
    Par shadowmoon dans le forum C#
    Réponses: 2
    Dernier message: 20/06/2014, 11h22
  2. failed to open stream: No such file or directory
    Par Deallyra dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2007, 09h33
  3. [Stream] Mettre le contenu d'un File dans un tableau de byte
    Par JohnBlatt dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 25/08/2006, 14h18
  4. [Système] failed to open stream: Too many open files
    Par shamanlinks dans le forum Langage
    Réponses: 7
    Dernier message: 23/05/2006, 11h59
  5. fread(void*, int, int, FILE*)
    Par keil dans le forum C++
    Réponses: 11
    Dernier message: 25/01/2006, 22h13

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