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 :

Pas de EOF détecté ! Stack overflow !


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Points : 36
    Points
    36
    Par défaut Pas de EOF détecté ! Stack overflow !
    Bonjour,

    Je n'arrive pas à faire un simple comptage de ligne d'un fichier CSV.
    Cela tourne en boucle jusqu'à l'erreur "Stack overflow" ! Je ne comprends pas pourquoi.
    Est-il possible que l'EOF ne soit pas présent dans mon fichier ?

    Voici mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    long getCSVNbLines(FILE * file)
    {
        long lignei = 0;
     
        if (file != NULL)
        {
            //while ((getc(file)) != EOF) {
            while (!feof(file))
            {
                if ((getc(file)) =='\n')
                {
                    lignei++;
                }
            }
            printf("Nombre de ligne du fichier: %d\n", lignei+1);
        }
        else
        {
            printf("ERROR: Le fichier est impossible à ouvrir !\n");
            printf("Code erreur %d \n", errno);
            return(0);
        }
        return (lignei);
    }
     
    int main (void)
    {
        char monFichier[]="InputData1.csv";
        FILE * file  = NULL;
        long nbLignes = 0;
     
        // Ouverture du fichier CSV
        file = fopen (monFichier, "r");
     
        // Calcul du nombre de ligne du fichier ouvert
        nbLignes = getCSVNbLines(file);
     
        // Fermeture du fichier ouvert
        fclose (file);
    }
    Quelqu'un a-t-il une idée ?...

    Voici un exemple du contenu du fichier InputData1.csv:

    0,99112756;0,000123995;0,000143696;0,000061779
    0,997749815;0,00003449;0,000035545;0,00001785
    1;0;0;0
    1;1
    1,5;1
    0;1
    95;0,973
    105;0,976

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pour commencer, voir la : http://c.developpez.com/faq/?page=es_general#ES_feof

    Ensuite, chez moi ça fonctionne très bien, donc je ne peux pas dire grand chose.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Points : 36
    Points
    36
    Par défaut
    Oui en fait, j'ai compris pourquoi ça plantait...
    Le code est bon. Ce que je n'ai pas dit c'est qu'en réalité après ce code de comptage du nombre de lignes, j'effectue d'autres traitements du fichier ouvert.
    EVidemment, j'avais oublié de remettre au début la tête de lecture du fichier !
    Il manque donc, après mon comptage de lignes, la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	   // Se placer au début du fichier
    	   //fseek(MP_FILE, 0L, 0);
    	   rewind(file) ; // Avantage: appel de clearerr() pour la remise à nul de l'indicateur d'erreur.
    Voilà ! Au moins ça servira à d'autres !

    Merci pour ton aide en tout cas, Bktero, et désolé du dérangement !

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Quel cachotier... En tout cas tu as bien prouvé qu'il ne faut pas faire une boucle en testant feof().

    Tu peux maintenant cliquer sur en bas de la page.

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

Discussions similaires

  1. [GNU-Prolog][Mémoire] Local stack overflow
    Par Maxoo dans le forum Prolog
    Réponses: 15
    Dernier message: 04/06/2008, 22h15
  2. stack overflow: question insoluble
    Par coyotte507 dans le forum SDL
    Réponses: 3
    Dernier message: 19/12/2006, 17h50
  3. Stack OverFlow
    Par Goundy dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2005, 21h35
  4. Problème de stack overflow
    Par heider dans le forum Langage
    Réponses: 13
    Dernier message: 22/09/2005, 19h50
  5. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16

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