Probleme d'acces fichier avec pointeur
Fermé
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
-
12 janv. 2014 à 13:16
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 - 12 janv. 2014 à 17:40
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 - 12 janv. 2014 à 17:40
A voir également:
- Probleme d'acces fichier avec pointeur
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
12 janv. 2014 à 15:41
12 janv. 2014 à 15:41
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
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
Modifié par explosiondream le 12/01/2014 à 16:00
Modifié par explosiondream le 12/01/2014 à 16:00
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 !!!"); }
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 15:59
12 janv. 2014 à 15:59
Donc sur ce programme, en fait, le "fprintf" s'exécute bien au début, mais au bout des 637 lignes, j'ai le message d'erreur "Desole, il y a eu une erreur d'acces au fichier" Je ne comprend pas comment c'est possible ... Une idée ?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 janv. 2014 à 16:05
12 janv. 2014 à 16:05
Salut,
Tu ne fais jamais de fclose de ton fichier avant de fopen à nouveau ?
Tu ne fais jamais de fclose de ton fichier avant de fopen à nouveau ?
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:07
12 janv. 2014 à 16:07
A quel moment ? Enfin, dans ces lignes-la ? ou dans mes autres fonctions void ?
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
Modifié par chico200987 le 12/01/2014 à 16:09
Modifié par chico200987 le 12/01/2014 à 16:09
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 );
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:18
12 janv. 2014 à 16:18
je vais essayer !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
12 janv. 2014 à 16:13
12 janv. 2014 à 16:13
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,
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:21
12 janv. 2014 à 16:21
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
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:34
12 janv. 2014 à 16:34
f((tsv/24) < 1 ) { tsv = tsv;}En fait il y a un else, apres, donc ce n'est pas si inutile ^^
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:36
12 janv. 2014 à 16:36
et si tu trouves ça touffu, imagines toi que, en tout, j'ai 1800 lignes de code ...
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
12 janv. 2014 à 16:39
12 janv. 2014 à 16:39
Concernant la remarque du if,
au lieu de
tu devrais faire :
au lieu de
if((tsv/24) < 1 ) { tsv = tsv;} else tsv=(tsv - 24*floor(tsv/24)) ;
tu devrais faire :
if((tsv/24) >= 1 ) tsv=(tsv - 24*floor(tsv/24));
explosiondream
Messages postés
49
Date d'inscription
dimanche 12 janvier 2014
Statut
Membre
Dernière intervention
13 janvier 2014
12 janv. 2014 à 16:44
12 janv. 2014 à 16:44
oui, enfin, ca, je ne pense pas sincerement que ce soit l'objet de mon erreur, ni de ma demande
12 janv. 2014 à 15:54
12 janv. 2014 à 15:57