Salut à toutes et à tous,

J'avoue que là, j'ai vraiment un os de taille. Pour faire simple: j'ai un programme en C qui lit un fichier de coordonnées cartésiennes.
J'ai pour ce programme deux structures:
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
	struct atom
	{
		char name[5];	// residue name
		double x;	// x coordinate
		double y;	// y coordinate
		double z;	// z coordinate
	};
 
	struct residue
	{
		int nb;
		int nb_atoms;
		unsigned short D_nb;
		double *D;
		struct atom ids[25];		// The size is not important; it will be re-scaled
	}
Un résidu a un numéro (nb), et est constitué de plusieurs atomes (nb_atoms), qui ont chacun un nom de 4 caractères (name[5]) et une coordonnées dans l'espace (x, y, z). Et dans mon fichier de coordonnées, j'ai plein de résidus.
D'autre part, dans la structure "residue", D est un tableau de valeurs et D_nb le nombre de données que j'ai pour le résidue en question.

Ensuite, je déclare la variable suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
struct residue residues[500]


Voici le GROS problème que j'ai rencontré:
A chaque fois que j'incrémente la valeur D d'un élément de residues, j'incrémente la valeur D_nb de 1 (Ce tableau est initialisé en tout début). Jusque là, rien d'extraordinnaire, ça donne en gros:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
residues[i].D[k] += K;      // K est un double, i est l'indice du résidu et k l'indice de l'atome
residues[i].D_nb++;        // i est l'indice du résidu
La complication vient maintenant:
Si K est un double, une des valeurs de mon tableau residues[i].D complètement perturbée, comme si la lecture du tableau était érronnée! Par exemple, elle passe de 0 à 13107!!
En revanche; si K est une valeur ronde (8 ou 8.0), tout se passe normalement, tel que je l'avais prévu.

Si quelqu'un a une idée, qu'il (elle) n'hésite pas surtout. Je lui en serai très reconnaissant!

A bientôt,
Mickaël