cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004
-
29 mars 2004 à 08:29
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 2006
-
30 mars 2004 à 11:45
Bonjour tous!
je suis en train de faire un programme avec des fichiers, c'est la premiere fois, et mon code plante, je ne sais pas si ce que j'ais fais est correct(apparement non vu que ça plante)
voilà mon code:
/* Option 6:Enregistrements */
void enregistrement()
{
int i;
familles=fopen("a:familles.dat","w");
for(i=1;i<=max;i=i+1)
{
fprintf(familles,"%s %d %d ",Tfamilles[i].nom,Tfamilles[i].nbpers,Tfamilles[i].appro);
cout<<"rentre dans la boucle familles";
}
cout<<"\n enregistrement terminé";
}
j'ai mis les prototype en debut de programme.
j'ai declare mon fichier aussi au debut:
/* Nom des fichiers */
FILE *familles;
et voilà, les variables gloables a tout le programme:
/* Variables */
typedef struct
{
int no;
char nom[20];
int nbpers;
int appro;
}Tenrfamilles;
Tenrfamilles Tfamilles[20];
j'espere que vous pourrez m'eclaircir et m'aider a me corriger
merci
Oceane
cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004 29 mars 2004 à 13:52
en effet , le fichier il ne le trouve pas.
mais j'ai peur de me tromper, mes fichiers existent, c'est ce qu'il fallait faire n'est ce pas? ce n'est pas un probleme de chemin, j'ai verifie. a quoi celà peut il etre du?
merci en tout cas
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004 29 mars 2004 à 16:02
j'avais dejà mis fclose, j'ai mis fflush mais ça ne marche pas, j'ai essayer de faire une boucle des données pour voir elles etaient bien dansle tableau, elle s'affiche bien a l'ecran, mais rien dans le fichier; je comprend pas.
a quoi sert la fonction ffleush()?
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 29 mars 2004 à 20:57
Ta boucle for devrait commencer à 0.
QUelle valeur vaut max ? (tu dois t'arrêter à 19 exactement vu
la taille de ton tableau )
Pourquoi n'utilises tu pas les flux C++ ofstream
qui s'utilise comme cout ?
En C++, tu n'as pas besoins de "typdéfé" tes structures
c'est automatique.
Tu ferais mieux de fournir un constructeur par défaut
pour intialiser ta struct, ça évitera des surprises.
struct Tenrfamilles {
int no;
char nom[20];
int nbpers;
int appro;
};
cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004 30 mars 2004 à 08:10
Pour ma boucle en effet, j'ai modifier, j'avais mis a un1 et la valeur max a 20 mais ça ne va rien changer vu que la boucle s'execute autant de fois.
Je n'utilise pas ofstream car je ne connais pas , ça marche comme cout, mais c'est quoi la difference? et ça s'ecrit comme ça:
ofstream<<"\n bonjour";??
J'ai initialise ma strucuture mais ça me marque toujours rien dans le fichier, là je desespere totalement.
Le programme s'execute comme si l'enregistrement fonctionnait. mais le fichier est vide %-6
merci
oceane
cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004 30 mars 2004 à 10:20
j'ai essaye ton code et chez moi ça ne marche pas, je travaille sur turbo c++.
using namespace std; il n'est pas reconnu, ça sert a quoi?
strcpy pareil, donc j'ai change et mis cout, mais ça n'enregistre pas.
je sais pas si je vais m'en sortir, en tout cas merci de m'aider.
oceane
cs_oceane67
Messages postés50Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention21 juin 2004 30 mars 2004 à 10:27
je suis en train de me demander, si le probleme ne vient pas d'ailleurs, je vous envoie tout mon code( c'est normal si certains cas ne marchent pas, mais ils sont pas necessaires pour l'enregistrement)
#include<conio.h>
#include<stdio.h>
#include
#include<string.h>
#define max 19
#define max2 51
typedef struct
{
int no;
char nom[20];
int nbpers;
int appro;
}Tenrfamilles;
Tenrfamilles Tfamilles[19];
int Tcheques[max2][max];
int bungalow[20];
int i,enr ;
char res;
void main()
{
// chargement();
initialiser();
int choix;
do
{
cout<<"\n Gestion des comptes cheques club.";
cout<<"\n 1- saisir la liste des nouvelles familles.";
cout<<"\n 2- saisir un approvisionnement de compte." ;
cout<<"\n 3- Saisir les cheques emis de la journee.";
cout<<"\n 4- lister les familles dont le solde est negatif." ;
cout<<"\n 5- lister le releve de compte d'une famille" ;
cout<<"\n 6- sauvegarder les donnees sur le disque.";
cout<<"\n 7- enregistrer les departs";
cout<<"\n 0 quitter le programme." ;
cout<<"\n votre choix ?";
cin>>choix;
switch(choix)
{case 1:nouvellesfamilles();
break;
case 2:approvisionnement();
break;
case 3:chequesemis();
break;
case 4:solde();
break;
case 5:releve();
break;
case 6:enregistrement();
break;
case 7: depart();
break;
}
} while(choix!=0);
if (enr==0)
{
cout<<"\n vous n'avez pas enregistre vos modifications,souhaitez vous le faire?(O/N)";
cin>>res;
if(res==0)
{
enregistrement();
}
cout<<"\n au revoir";
}
getch();
}
/* option 1*/
void nouvellesfamilles()
{
int nb;
char rep;
rep='o';
nb=1;
// i=0;
while( rep=='o')
{
/** on verifie que le bungalow est vide **/
if(nb>=max)
{
cout<<"\n le village vacances est complet, vous ne pouvez plus rajouter de famille.";
cout<<"\n ";
rep='n';
}
else
{
cout<< "\n bungalow no "<< nb;
cout<<"\n entrer le nom:";
cin>>Tfamilles[nb].nom;
cout<<"\n entrer le nombre de personnes:";
cin>>Tfamilles[nb].nbpers;
nb=nb++;
cout<<"\n voulez vous entrer une autre famille?(o/n)" ;
cin>> rep;
}
}
enr=0 ;
}
/* Option 2*/
void approvisionnement()
{int mont,i,r;
char rep[20];
char res,res2;
do
{
i=1;
do
{
cout<<"\n entrer le nom:";
cin>>rep;
do
{ if (strcmp(Tfamilles[i].nom, rep)==0)
{ cout<<"\n montant credite?";
cin>>mont;
cout<<"\n etes vous sur du montant?(O/N):";
cin>>res;
}
else
{ cout<< "\n ce nom ne correspond a aucun bungalow." ;
}
i=i+1;
}
while(strcmp(Tfamilles[i].nom, rep)==0 && i<=max);
}
while (strcmp(Tfamilles[i].nom, rep)==1);
Tfamilles[i].appro=Tfamilles[i].appro+ mont;
cout<<"voulez vous entrer un autre approvisionnement?(O/N):";
cin>> res2;
}while(res2=='o');
enr=0 ;
cout<< Tfamilles[i].appro ;
}
/* Option 3 */
void chequesemis()
{
i=0;
int j;
cout<<"\n lorsque la saisie est terminee ,taper 0 dans le no de bungalow";
do
{ i=0;
cout<<"\n entrer le no de bungalow:";
cin>>i;
if(i!=0)
{
cout<<"\n entrer le no d'ordre";
cin>>j;
cout<<"\n entrer le montant du cheque:";
cin>>Tcheques[i][j];
Tfamilles[i].appro= Tfamilles[i].appro -Tcheques[i][j];
cout<< Tfamilles[i].appro ;
}
}
while ( i!=0);
enr=0;
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 30 mars 2004 à 11:45
Wahou... désolé trop long, j'ai pas le temps de tout lire.
mais plusieurs points :
1. le compilateur de Borland est disponible gratuitement.
2.Tenrfamilles Tfamilles[19];
les éléments valident de ce tableau sont compris
entre 0 et 18 inclus, or tu accèdes parfois au 19.
3. tu fais des Tcheques[i,j]
ça compile mais ne fais sûrement pas ce que tu crois
tu dois changer en Tcheques[i][j] sûrement (comme ailleurs)
4. les index sur les tableaux commencent à 0
tes boucles commencent trop souvent à 1... idem
pour la fin <= max alors que c'est < max
5.tu fais beaucoup trop de do{}while... la plupart
sont en fait des while ou des for.