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 :

Problème lecture fichier en C (débutant)


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème lecture fichier en C (débutant)
    Bonjour à tous,

    Je suis une débutante en matière de programmation C.
    Après plusieurs heures de prises de tête (en vain), je viens vers vous pour vous demander de l'aide.
    Je souhaite faire un programme qui à un moment donné lit un fichier. Je pense que je ne maitrise pas la fonction fscanf.

    Le fichier est de ce type :
    Sur la première ligne: le nombre d'atomes dans le système moléculaire.
    Sur la deuxième ligne: une ligne de commentaire (vide dans le cas présent)
    Puis dans l'ordre pour chaque ligne:
    1ère donnée : type d'atome
    2ème donnée (sur 3 colonnes) : positions x, y et z
    3ème donnée : molécule à laquelle appartient l'atome
    4ème donnée : charge (en électron)
    5ème donnée (sur deux colonnes) : paramètres de van der Waals de l'atome (r et e )

    6

    H 0.000000 0.000000 0.000000 1 0.2 0.600 0.016
    O 0.000000 0.000000 0.950000 1 -0.4 1.721 0.210
    H 0.895669 0.000000 1.266667 1 0.2 0.600 0.016
    H -2.004243 -1.702643 2.393612 2 0.2 0.600 0.016
    O -2.676493 -2.171643 2.873840 2 -0.4 1.721 0.210
    H -3.279350 -1.549596 3.263868 2 0.2 0.600 0.016

    Ce que j'ai fait :

    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
    h2o_h2o = fopen("h2o_h2o.xyz","r");
     
    if(h2o_h2o)
    {
    		fscanf(h2o_h2o,"%d\n\n",&nb_ato_tot);
     
    		for (i=1;i<=nb_ato_tot;i++)
    			{
    				fscanf(h2o_h2o,"%c %f %f %f %d %f %f %f\n",&molecule[i].type,&molecule[i].x,&molecule[i].y,&molecule[i].z, &molecule[i].appartenance,&molecule[i].charge,&molecule[i].vdw_r,&molecule[i].vdw_e);
    			}
     
    		chargement=1;
    		printf("%s\n\n","Chargement depuis le fichier h2o_h2o.xyz reussi !");
     
    	}
    else
    	{
    		printf("%s\n\n","Impossible de lire le fichier h2o_h2o.xyz !");
    	}
     
    fclose(h2o_h2o);
    J'ai fait un test, j'arrive seulement à lire le nombre d'atomes total correctement, soit la première ligne, le reste est complètement faux.
    Le problème peut-il venir de la lecture de la ligne de commentaire (vide)?

    J'espère avoir été suffisamment clair, ce n'est pas facile de parler d'un sujet qu'on ne maîtrise pas ou très peu.

    Merci d'avance à ceux qui essayeront de m'éclairer.

  2. #2
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    une question : es-tu obligé de rajouter des "\n" à la fin du format de lecture
    de fscanf() ?

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour et bienvenue sur le forum

    Pouvez vous nous montrer les valeurs que cela vous affiche ( celles que vous dites fausses ).
    Pouvez vous aussi nous montrer plus de votre code ?
    Et comme l'a dit exe2bin, je ne suis pas sur que mettre les '\n' dans les fscanf() soit une bonne chose ( mais je ne suis pas sur que ce soit une mauvaises chose )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci à vous deux d'avoir essayé de m'aider.
    J'ai finalement réussi à faire fonctionner mon programme.
    J'ai pas enlevé le \n dans la fonction fscanf mais il y a avait plusieurs petites erreurs comme commençait le tableau à i=1 au lieu de i=0, et j'ai enlevé un & dans la fonction fscanf pour le type, par hasard et ça a marché, je sais d'ailleurs pas pourquoi.

    Et par hasard vous seriez comment faire pour créer une variable qui donne le nombre total d'atomes pour la molécule 1 (appartenance = 1) et de même pour la molécule 2 (appartenance = 2) ? Je suppose qu'il faut faire une somme mais je vois pas trop comment.

    Merci d'avance et peut être à bientôt pour d'autres questions.

Discussions similaires

  1. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05
  2. Problème Lecture fichier
    Par Gebudi. dans le forum C++
    Réponses: 1
    Dernier message: 29/05/2006, 08h37
  3. problème lecture fichier
    Par Pleymo dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2005, 09h00
  4. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11
  5. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36

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