Probleme d'acces fichier avec pointeur
explosiondream
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
-
chico200987 Messages postés 791 Date d'inscription Statut Membre Dernière intervention -
chico200987 Messages postés 791 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous !
Voila, je dois créer un programme qui me fait des calculs sur une certaine période de temps et me stocke les résultats sur un même fichier.
Le problème que j'ai , c'est que j'utilise de nombreuse boucles et qu'au bout d'un certain moment (ce qui correspond à 637 lignes du fichier texte utilisé) j'ai un problème d'accès au document !
Est ce que quelqu'un aurait une idée de comment réparer ça ?
Merci d'avance =D
Voila, je dois créer un programme qui me fait des calculs sur une certaine période de temps et me stocke les résultats sur un même fichier.
Le problème que j'ai , c'est que j'utilise de nombreuse boucles et qu'au bout d'un certain moment (ce qui correspond à 637 lignes du fichier texte utilisé) j'ai un problème d'accès au document !
Est ce que quelqu'un aurait une idée de comment réparer ça ?
Merci d'avance =D
A voir également:
- Probleme d'acces fichier avec pointeur
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
3 réponses
Bonjour,
Probablement qu'il y a une erreur dans le code...
Si tu pouvais donc le poster, ça serait plus simple.
Merci d'utiliser la balise "code" située à droite du bouton "souligné" et sélectionne "C" pour nous faciliter la lecture.
Cdlt,
Probablement qu'il y a une erreur dans le code...
Si tu pouvais donc le poster, ça serait plus simple.
Merci d'utiliser la balise "code" située à droite du bouton "souligné" et sélectionne "C" pour nous faciliter la lecture.
Cdlt,
explosiondream
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
okay je te le poste, mais sache qu'il est ultra long ...
explosiondream
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
je n'ai mis que la partie interessante !
void calcul_semaine(int M, float lon, float lat) { printf("A present, nous allons vous demander de donner les coordonnees du lieu ou votre simulation doit etre faite.\n Pour cela, voici un petit rappel:\n\t La LATITUDE, notee lat, donne un renseignement sur la position Nord/Sud par rapport a l'equateur. Elle est positive vers le Nord,et negative vers le Sud.\n\t La LONGITUDE, notee lon, est un renseignement sur la position Est/Ouest par rapport au meridien de Greenwich. Elle est positive vers l'Ouest et negative vers l'Est.\n\n"); printf("Veuillez nous donner la LATITUDE (en degre):\t"); Color(12,0);scanf("%f", &lat);Color(15,0); printf("\n"); printf("Veuillez nous donner la LONGITUDE (en degre):\t"); Color(12,0);scanf("%f", &lon);Color(15,0); printf("\n"); // printf("Nous avons choisi un pas de 30 minutes, soit 0.5h pour faire cette simulation\n"); int v; //declaration du jour pour l'affichage dans le fichier texte for (v=1;v<=7;v=v+1) { float H,h,m; for(H=0;H<=23;H=H+1) { for (m=0;m<=59;m=m+15) { h=H+(m/60); float J; float TU; // Temps Universel double Pi=3.141592653576; // Valeur de PI ...... double dec; // definition declinaison double cor; //facteur de correction double tsv; // definition temps solaire vrai double ah; // definition angle solaire double HS; // Definition angle de hauteur solaire double Gc; // Definition de l'irradiation solaire globale TU=h-(lon/15); float J2; if(J>=1 && J<=81) { J2 = 365-J; } else J2=J; cor=1+0.034*cos((2*Pi/365.25)*(J2-3)); //facteur de correction [Sans unite] dec= asin(0.3978*sin(((2*Pi)/365.25)*(J2-81-2*sin(((2*Pi)/365.25)*(J2-2)))));// declinaison [En Radian] dec=-dec; if(dec/(2*Pi) < 1) dec = dec; else dec = dec - 2*Pi*floor(dec/(2*Pi)); tsv = TU + lon*(Pi/180)*(12/Pi)+(1/60)*(57.3)*(9.9*sin(1.972*(2*Pi/360)*J2+200)-7.7*sin((2*Pi/365.25)*J2-2)); // temps solaire Vrai if((tsv/24) < 1 ) { tsv = tsv;} else tsv=(tsv - 24*floor(tsv/24)) ; ah=tsv*(Pi/12)+Pi;// Angle de Hauteur solaire en RADIAN et modulo 2Pi; if(ah/(2*Pi) < 1) {ah = ah;} else ah=(ah - 2*Pi*floor(ah/(2*Pi)) ); HS=(Pi/2)-acos(sin(lat*(Pi/180))*sin(dec)+cos(lat*(Pi/180))*cos(dec)*cos(ah)); // Hauteur Solaire double TL=4.35; double X = sin(HS); double Y=(36+TL)/33; Gc = cor*(1300-TL)*pow(X,Y); if (Gc > 0.01) { Gc = Gc; } else { Gc = 0; } FILE*document; document = fopen("C:/Users/marie/Desktop/semaine.txt","a"); if (document != NULL) { fprintf(document,"%d \t",v); fprintf(document,"%.0lf:%.0lf \t",H,m); fprintf(document,"%.3lf\n",Gc); } else { printf("Desole, il y a eu une erreur d'acces au document"); exit(-1); } } } } printf("Mission Accomplie, les donnees sont sur le fichier SEMAINE !!!"); }
FILE*document;
document = fopen("C:/Users/marie/Desktop/semaine.txt","a");
if (document != NULL)
{
fprintf(document,"%d \t",v);
fprintf(document,"%.0lf:%.0lf \t",H,m);
fprintf(document,"%.3lf\n",Gc);
}
else
{
printf("Desole, il y a eu une erreur d'acces au document");
exit(-1);
}
//ici par exemple
fclose (document );
J'ai pas tout lu, mais j'ai déjà plein de remarques.
scanf("%f", &lat);
Tu souhaites modifier la variable qui est en paramètre. Le problème est que vu que le paramètre n'est qu'une copie, tu ne bénéficieras pas de la nouvelle valeur dans la fonction appelante. Il faut passer par un pointeur :
J'ai mis des double, car c'est mieux que les float. Sauf cas particulier, tu peux oublier les float.
Même remarque pour les autres variables.
double Pi=3.141592653576;
Pourquoi redéfinir Pi alors que la constante existe déjà dans le header math.h ?
cor=1+0.034*cos((2*Pi/365.25...
Pourquoi multiplier par 2PI/365.25 ??? Le facteur est 2PI/360.
tsv = TU + lon*(Pi/180)*(12/Pi)+(1/60)*...
Attention 1/60 fait 0 (division de deux entiers). Utilise plutôt (double)1/60 ou 1.0/60
f((tsv/24) < 1 ) { tsv = tsv;}
tsv=tsv ??? Que souhaites-tu faire ? Cette instruction ne fait rien du tout fonctionnellement. Même remarque pour d'autres variables.
FILE*document;
document = fopen("C:/Users/marie/Desktop/semaine.txt","a");
Tu mets ce code dans une boucle for. Autrement dit, à chaque itération, tu rouvres le document et donc relis depuis le début. Est-ce normal ? Si oui un rewind suffirait. document=fopen(...) n'est à appeler qu'une seule foisd. Et il ne faut pas oublier fclose(...) pour fermer le fichier.
Ton code est vraiment "touffu". Il ne faut pas hésiter à utiliser des fonctions pour simplifier la lecture du code. Ce n'est pas un luxe.
Note : merci d'avoir utilisé la balise "code", mais si tu pouvais en plus sélectionner "C" dans la liste déroulante, ça serait top :-).
Cdlt,
scanf("%f", &lat);
Tu souhaites modifier la variable qui est en paramètre. Le problème est que vu que le paramètre n'est qu'une copie, tu ne bénéficieras pas de la nouvelle valeur dans la fonction appelante. Il faut passer par un pointeur :
void calcul_semaine(double *lat) { scanf("%lf", lat); }
J'ai mis des double, car c'est mieux que les float. Sauf cas particulier, tu peux oublier les float.
Même remarque pour les autres variables.
double Pi=3.141592653576;
Pourquoi redéfinir Pi alors que la constante existe déjà dans le header math.h ?
cor=1+0.034*cos((2*Pi/365.25...
Pourquoi multiplier par 2PI/365.25 ??? Le facteur est 2PI/360.
tsv = TU + lon*(Pi/180)*(12/Pi)+(1/60)*...
Attention 1/60 fait 0 (division de deux entiers). Utilise plutôt (double)1/60 ou 1.0/60
f((tsv/24) < 1 ) { tsv = tsv;}
tsv=tsv ??? Que souhaites-tu faire ? Cette instruction ne fait rien du tout fonctionnellement. Même remarque pour d'autres variables.
FILE*document;
document = fopen("C:/Users/marie/Desktop/semaine.txt","a");
Tu mets ce code dans une boucle for. Autrement dit, à chaque itération, tu rouvres le document et donc relis depuis le début. Est-ce normal ? Si oui un rewind suffirait. document=fopen(...) n'est à appeler qu'une seule foisd. Et il ne faut pas oublier fclose(...) pour fermer le fichier.
Ton code est vraiment "touffu". Il ne faut pas hésiter à utiliser des fonctions pour simplifier la lecture du code. Ce n'est pas un luxe.
Note : merci d'avoir utilisé la balise "code", mais si tu pouvais en plus sélectionner "C" dans la liste déroulante, ça serait top :-).
Cdlt,
J'ai pris tes remarques en compte ... Mais juste une chose, les formules ne sont pas de moi, je ne vais pas les modifier ! Si j'ai mis Pi, c'est parce que sur l'ordinateur de l'école ou je suis, la bibliothèque math.h n'est pas installée, ni fonctionnelle, ni quoi que ce soit. Pour les calculs, le truc, c'est que les résultats sont bons ! La je t'ai mis le calcul_semaine, car c'est a partir de lui que commence mes problemes, mais j'ai aussi un calcul instantanné, sur un jour, mois et année.. L'instantannée et le jour fonctionne bien, le probleme est que au bout d'un moment le fichier devient introuvable, et c'est ca que je ne comprend pas