Impossible de rentrer dans une boucle for

Signaler
Messages postés
37
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
6 décembre 2005
-
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
-
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
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
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...