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 :

[debutant] donnees depuis un fichier dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Par défaut [debutant] donnees depuis un fichier dans un tableau
    bonjour,

    grand debutant, je cherche a recuperer des infos depuis un fichier txt avec ./a.out<NomDeFichier.txt
    du style
    12
    1231
    43243
    4324

    alors j'ai tape ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    int main() {
      char line[10];
      int i, c;
      i=0;
      while((c=getchar()) != EOF)
        line[i] = c;
        printf("%d", line[i]);
      ++i;
    return 0;
    }
    je voulais stocker les lignes dans un tableau (en fait chaques lignes dans un tableau) mais je ne comprend pas pourquoi la valeur de line[i] est 0

    merci de votre aide

  2. #2
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par lolostralie
    bonjour,

    grand debutant, je cherche a recuperer des infos depuis un fichier txt avec ./a.out<NomDeFichier.txt
    du style
    12
    1231
    43243
    4324

    alors j'ai tape ca

    #include <stdio.h>
    int main() {
    char line[10];
    int i, c;
    i=0;
    while((c=getchar()) != EOF)
    { line[i] = c;
    printf("%d", line[i]);
    ++i;}
    return 0;
    }

    je voulais stocker les lignes dans un tableau (en fait chaques lignes dans un tableau) mais je ne comprend pas pourquoi la valeur de line[i] est 0

    merci de votre aide
    Il faut des acolades au While.
    De plus j'utiliserais un for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      c = getch();
      for (i=0;c != EOF;i++)
      { 
           line[i] = c;
           printf("%d", line[i]);
           c=getchar();
      }
    Pour terminer

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    La conversion n'est pas automatique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long int n=strtol(s,NULL,10);
    printf("%ld\n",n);

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le type doit être "int" car "c" est de type "int".
    Il y n'a pas assez de place pour contenir tous les caractères dans cette série:

  5. #5
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par seriousme
    Le type doit être "int" car "c" est de type "int".
    Il y n'a pas assez de place pour contenir tous les caractères dans cette série:
    Dans ce cas la mon post precedent n'est plus d'actualitée.!

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((c=getchar()) != EOF)
    La lecture peut se faire par ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(fgets(line,sizeof(line),stdin)!=NULL){
    long int n=strtol(line,NULL,10);
    printf("%ld",n);
    }
    if(feof(stdin)){
                    printf("La fin de la liste a ete atteinte.\n");
                   }
    else{
         printf("Une erreur de lecture est survenue.\n");
        }
    Mais avec ce code les différents nombres ne sont pas conservés, "line" ne stocke que le dernier.

  7. #7
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par lolostralie
    je voulais stocker les lignes dans un tableau (en fait chaques lignes dans un tableau) mais je ne comprend pas pourquoi la valeur de line[i] est 0
    /!\ Dans line[0] par ex tu ne peu stocker qu'un seul caractere !
    Par ex:
    2 > line[0]
    3 > line[1]
    a > line[2]
    g > line[3]
    b > line[4]
    etc...

  8. #8
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Par défaut Un grand merci a tous !
    Merci beaucoup pour tous les tuyaux, j'ai galéré une journèe sur ce truc .... mais maintenant ca marche !

  9. #9
    Membre confirmé Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    ?


  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et au fait pourquoi avec ce code ca part en boucle infinie si il n'y a pas de fichier en entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(fgets(line,sizeof(line),stdin)!=NULL){
    long int n=strtol(line,NULL,10);
    printf("%ld",n);
    }
    if(feof(stdin)){
                    printf("La fin de la liste a ete atteinte.\n");
                   }
    else{
         printf("Une erreur de lecture est survenue.\n");
        }
    ?

  11. #11
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par seriousme
    Et au fait pourquoi avec ce code ca part en boucle infinie si il n'y a pas de fichier en entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(fgets(line,sizeof(line),stdin)!=NULL){
    long int n=strtol(line,NULL,10);
    printf("%ld",n);
    }
    if(feof(stdin)){
                    printf("La fin de la liste a ete atteinte.\n");
                   }
    else{
         printf("Une erreur de lecture est survenue.\n");
        }
    ?
    Le flux d'entrée est ici stdin, flux ouvert par défaut au début du programme par le runtime et fermé à la fin du programme (et encore, rien ne le garantit). De plus qui souvent n'est pas rattaché à un fichier sur disque ou autre périphérique mais à une console de saisie : donc si c'est une console de saisie, tu n'as pas de EOF explicite et le fgets() ne renvoie jamais NULL tant que le EOF ne sera pas rencontré. Donc il faut forcer le EOF dans la console. Sous Windows, c'est CTRL+Z + {Entrée}. Sinon, en tapant {Entrée} à chaque fois par exemple, fgets() lit la ligne et stocke \n\0 dans le tampon line, mais la boucle continue.

    A+

  12. #12
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et y a t'il un moyen de mettre explicitement un "EOF" à l'ouverture de "stdin" sans le faire au clavier?

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

Discussions similaires

  1. Compléter une base de donnee depuis une sub dans un fichier Excel
    Par mimi123456789 dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/08/2012, 16h59
  2. Réponses: 2
    Dernier message: 01/10/2009, 15h39
  3. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59
  4. Mettre un fichier dans un tableau
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 26/07/2005, 10h47
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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