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 :
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.
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);
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.
Partager