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 :

Affichage de "-1" avec printf


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 210
    Points : 91
    Points
    91
    Par défaut Affichage de "-1" avec printf
    Bonjour à tous,

    Je lis (enfin j'essaie) de lire une image PGM (en format binaire P5). Tout fonctionne bien sauf à un moment, le programme s’arrête et affiche "-1". Le moment de l'arret change en fonction de l'image (qui garde toujours la même taille).
    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
        int compteur = 0;
     
        fichier = fopen("1.pgm", "r");
        fseek(fichier, 15, SEEK_SET);
     
        if (fichier != NULL)
        {
            // Boucle de lecture des caractères un à un
            do
            {
                caractereActuel = fgetc(fichier); // On lit le caractère
                printf("%d", caractereActuel); // On l'affiche
               printf(" "); // on affiche un espace
               compteur ++; // incrémente le compteur
            } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
     
            printf("compteur = %d", compteur);
            fclose(fichier);
        }
     
        return 0;
    }
    Voici l'image

    Lorsque je le teste sur mon PC, cela arrive après le caractère 309 (windows 10 Code::block) alors lorsque j'essaie sur le site repl.it ... il n'y a pas de soucis .

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    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 627
    Points : 10 548
    Points
    10 548
    Par défaut
    Essaye dans un premier temps de faire ton fgetc et juste après le test du style


    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(int argc, char* argv[])
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
        int compteur = 0;
     
        fichier = fopen("1.pgm", "r");
        fseek(fichier, 15, SEEK_SET);
     
        if (fichier != NULL)
        {
            // Boucle de lecture des caractères un à un
            caractereActuel = fgetc(fichier); // On lit le caractère
     
            while (caractereActuel != EOF) { // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
               printf("%d", caractereActuel); // On l'affiche
               printf(" "); // on affiche un espace
               compteur ++; // incrémente le compteur
     
               caractereActuel = fgetc(fichier); // On lit le caractère suivant
            }
     
            printf("compteur = %d", compteur);
     
            fclose(fichier);
        }
     
        return 0;
    }

    Édit : on peut faire aussi, dans mon code, remplacer les 2 fgetc par 1 while ((caractereActuel = fgetc(fichier)) != EOF) {

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 210
    Points : 91
    Points
    91
    Par défaut
    Effectivement, si j'affiche le caractère avant de tester la fin de fichier ... c'est normale que cela ne fonctionne pas comme prévu. Merci !

    Par contre, je ne m'explique toujours pas pourquoi, le programme fonctionne sur le site Repl.it et pas sur mon pc (il bloque au caractère 309)

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

Discussions similaires

  1. Affichage comme la commande man avec printf en C
    Par dylan7581 dans le forum C
    Réponses: 2
    Dernier message: 08/01/2019, 19h58
  2. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 19h30
  3. Synthaxe pour expression comprenant quote avec commande like
    Par loopy4321 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/07/2004, 13h21

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