Impossible de rentrer dans une boucle for

Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005
-
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
-
Salut, j'ai un gros probleme qui me laisse sans réponse, je n'arrive pas à rentrer dans la boucle for suivante:
for(i=0;i<cptTimesArray;i++)
{
printf("Lecture des donnees\n");
fscanf(fIn, "%f %f %d", &bufDeterministTime ,&bufEspionsTime, &bufNbLMDs);


sumDeterministTime+=bufDeterministTime;
sumEspionsTime+=bufEspionsTime;
sumLMDs+=bufNbLMDs;
}
Quelqu'un peut-il m'expliquer ce qui se passe?
Merci.

11 réponses

Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
cptTimesArray est sûrement <= 0 donc tu ne rentre pas dans la boucle

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005

En fait mon programme s'arrete plus tot, au niveau du if(fIn==NULL)
continue;

Voila le code complet:
void main(int argc, char **argv)
{
FILE *fIn=NULL;
FILE *fOut=NULL;
float randPercent, crossPercent, mutPercent, stepPercent=10.0f;
float alpha, orangeSkin, lmdsSize = 10.0, bvSize;
int nbPions = 500;
int nbGen = 10;
int cptTimesArray = 0,i;
int cptposition = 0;
char filename [64],filename_results [64];
float bufEspionsTime, bufDeterministTime;
int bufNbLMDs;
float sumDeterministTime, sumEspionsTime;
int sumLMDs;sprintf(filename_results,"%s_%d","results/ESP_static",
(int)lmdsSize);
strcat(filename_results, ".xls");
fOut=fopen(filename_results,"wt");
fprintf(fOut, "Determinist Time\tEspions Time\tNb LMDs:\n");


printf(" Debut de l'analyse des donnees\n");
for(randPercent=0.0;randPercent<=100.0;randPercent+=stepPercent)
{
for(crossPercent=0.0;crossPercent<=100.0-randPercent;crossPercent+=stepPercent)
{
mutPercent = 100.0 - randPercent - crossPercent;
{
for(bvSize=1.0;bvSize<=30.0;bvSize += 2.0)
{
for(lmdsSize=10.0, alpha=1.0; alpha<=5.0; alpha += 0.2)
{
orangeSkin = alpha * lmdsSize;


/*sprintf(filename,"%s%s_%d_%d_%d_%d_%d",iFolder,
"times/ESP_static_",
(int)randPercent,
(int)crossPercent,
(int)mutPercent,
(int)orangeSkin,
(int)bvSize);*/

sprintf(filename,"%s_%d_%d_%d_%d_%d","times/ESP_static",
(int)randPercent,
(int)crossPercent,
(int)mutPercent,
(int)orangeSkin,
(int)bvSize);


fIn=fopen(filename,"rt");

if(fIn==NULL)
continue;

sumDeterministTime = 0.0;
sumEspionsTime = 0.0;
sumLMDs = 0;

for(i=0;i<cptTimesArray;i++)
{
printf("Lecture des donnees\n");
fscanf(fIn, "%f %f %d", &bufDeterministTime ,&bufEspionsTime, &bufNbLMDs);


sumDeterministTime+=bufDeterministTime;
sumEspionsTime+=bufEspionsTime;
sumLMDs+=bufNbLMDs;
}


fprintf(fOut, "%f\t%f\t%d\n", (float)sumDeterministTime, (float)sumEspionsTime, (int)sumLMDs);
fclose(fOut);
fOut=NULL;
}
}
}
}
}

printf(" Fin de l'analyse des donnees\n");
}
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Premièrement, filename n'a pas d'extension (alors que filename_results oui) mais ce n'est peut-être pas nécessaire...

Deuxièmement, est-ce que 64 caractères pour tes noms de fichiers suffisent?

Troisièmement, cptTimesArray est initialisé à 0 mais ne change jamais de valeur donc tu ne risque pas d'entrer dans ta boucle

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
59
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2006

Si ton fopen est toujours null, ton continue te fait boucler sur la boucle
for(lmdsSize=10.0, alpha=1.0; alpha<=5.0; alpha += 0.2)
sans jamais passer dans la suite du code...

Essaye d'afficher un message pour vérifier que ton ouverture se fait bien...
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005

Le probleme ne vient pas de l'extension de filename ou du nombre de carctères, j'ai déjà vérifié çà. Par contre je ne parviens pas à changer le valeur du cptTimesArray et quand je le remplace par un entier, çà ne marche pas non plus.
Je ne vois pas du tout comment faire cela alors si tu as une idée, elle sera la bienvenue chez moi!!!
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005

Effectivement, il semble bien que le probleme vienne du fait que le fopen est toujours null mais les fichiers a traiter sont dans le répertoire "times" et ils contiennent tous des données alors je comprends pas.
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Quand tu mets un cheùin de fichier dans une chaine de caractères, n'oublie pas de doubler le caractère '\':

fprintf(chaine,"%s_%d",'C:\\test\\truc, i);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005

Je ne met aucun chemin d'acces mais mon fichier results se crée dans le bon repertoire donc je ne comprends pas pourquoi la lecture poserais un pb.
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
sprintf(filename,"%s_%d_%d_%d_%d_%d","times/ESP_static",


(int)randPercent,


(int)crossPercent,


(int)mutPercent,


(int)orangeSkin,


(int)bvSize);



Moi, je ferais:

sprintf(filename,"%s_%d_%d_%d_%d_%d","times\\ESP_static",


(int)randPercent,


(int)crossPercent,


(int)mutPercent,


(int)orangeSkin,


(int)bvSize);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005

Le probleme ne vient pas de là, je craque!!!
tu ne sais pas ce qui peut provoquer le fopen toujours null, je crois vraiment que le pb est là.
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Pourquoi fopen(filename,"rt") et non pas fopen(filename,"r") tout court?

Il faut savoir que fopen retourne NULL s'il n'a pas réussi à ouvrir le
fichier. Alors soit il n'existe pas, soit tu n'as pas les droits pour
l'ouvrir...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...