begin process at 2012 05 29 15:41:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

lundi 29 mars 2004 à 10:42:00 | Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

barbamaman


Coucou :)

Je débute juste en C++ et je ne suis pas doué pour le coup^^ J'ai un exercice sur les fichiers qui me demande de faire ça:

Pour toutes les questions suivantes, utiliser une structure.

1/ Ecrire une fonction permettant de créer séquentiellement un fichier "mesures" comportant pour chaque mesure:
-nom (20 caractères maximum), nom de la mesure
-reference (15 caractères maximum), référence de la mesure
-resultat (réel), résultat de la mesure
Les informations relatives aux différentes mesures seront saisies au clavier.

2/Ecrire une fonction permettant, à partir du fichier créé précédemment, de retrouver les informations correspondant à une mesure de nom donné.

3/Ecrire une fonction permettant, à partir du fichier créé précédemment, de retrouver les informations relatives à une mesure de "rang" donné (par accès direct).

4/Ecrire un programme de test regroupant toutes ces fonctions avec possibilité de menu de choix pour l'utilisateur comme ci-dessous:
1 Créer et remplir le fichier mesures
2 Consulter mesure par son nom
3 Consulter mesure par son rang dans le fichier mesures


Pour le 1/ j'ai fait cela :

[quote]
#include <iostream.h>
#include <conio.h>
#include <stdio.h>

struct mesure
{
char nom[20];
char reference[15];
float resultat;
FILE * fp;
void saisie();
};

void mesure::saisie()
{
fp=fopen ("mesures.txt", "at");
cout<<"Donnez le nom de la mesure : ";
cin>>nom;
fprintf (fp,"%s",nom);
cout<<"Donnez la reference : ";
cin>>reference;
fprintf (fp," %s",reference);
cout<<"Donnez le resultat de la mesure : ";
cin>>resultat;
fprintf (fp," %f\n",resultat);
fclose (fp);
}
void main()
{ int x;
mesure nouvelle;

x=1;
while (x!=0)
{
nouvelle.saisie();
cout<<"Donner 0 si la saisie est finie ou 1 si elle continue : ";
cin>>x;
};
getch();
}
[/quote]

Bon ça marche mais pour que ça puisse fonctionner avec la suite il doit faloir changer des trucs peut-être
Après le 2/ je ne sais pas trop comment faire et le 3/ vu le cours il faut se servir de fseek et fread (et fwrite peut-être du coup).

Si quelqu'un a une idée, je l'épouse sur le champ ! Enfin juste si c'est une demoiselle ;)

Merci beaucoup en tout cas :)
lundi 29 mars 2004 à 11:41:45 | Re : Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

lpikachu58

oui il faut ce servir de fwrite et fread au lieu de fprintf

be linux
lundi 29 mars 2004 à 12:05:53 | Re : Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

barbamaman


Oui et j'essaye mais je n'y arrive pas et là ça commence à m'énerver :(
ça fait qq jours que le soir je me penche là-dessus en rentrant du travail et ça n'avance pas... C'est ce qui m'a conduit à chercher de l'aide 8)
Autant le 4/ je pense y arriver sans mal, autant les 2/ et 3/ je cale :(
lundi 29 mars 2004 à 20:49:45 | Re : Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

Hylvenir

Bonjour,
plusieurs remarques/conseils comme tu veux :
1. utilise #include <iostream> avec un using namespace std;
au pire demande à ton prof de t'expliquer.
Donc #include <cstdio> idem.

2. Pense à ta structure Mesure n'est pas censé contenir
un pointeur sur un fichier. Passe le plutôt
en paramètre de ta fonction Saisie.

3. utilise plutôt les flux C++ ifstream pour la lecture
et ofstream pour l'écriture.

4. Evite de mélanger des cin/cout C++ avec des fprintf/fscanf
plutôt C.

5. Evite le conio.h qui n'est pas standard et qui ne sert
qu'à arrêter ton programme pour que tu puisses voir quelque chose.

6. Fais déjà le 4, il te suffit de ne rien faire pour les
fonctions que tu n'auras pas encore implémenté.

Bon courage.

Indice : tu peux utiliser dans ton cas un constructeur de ta structure pour créer une mesure à partir d'un flux que tu auras
préalablement ouvert.
lundi 29 mars 2004 à 21:38:58 | Re : Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

barbamaman


Voilà ce que j'ai fait en rentrant du boulot, ça compile mais ça ne marche pas. Et encore, la recherche par rang fait planter...
Sinon j'ai mis un fichier mesures.txt pour pouvoir l'ouvrir et voir ce qui a été écrit dedans, et ce n'est pas génial, le resultat (float) n'apparait pas ...

[citation]

#include <stdio.h>
#include <iostream.h>
#include <conio.h>

typedef struct
{
char nom[20];
char reference[15];
float resultat;

} mesure;


int saisie()
{
mesure NouvelleMesure;
FILE* fp;

fp = fopen ("mesures.txt", "at";

if (!fp)
{
cout<<"Problème de fichier !";
return(1);
}

cout<<"nDonnez le nom de la mesure : ";
cin>>NouvelleMesure.nom;

cout<<"Donnez la reference : ";
cin>>NouvelleMesure.reference;

cout<<"Donnez le resultat de la mesure : ";
cin>>NouvelleMesure.resultat;

fwrite(&NouvelleMesure, sizeof(mesure), 1, fp);
fclose(fp);

return(0);
}

void rechercherang()
{
FILE*fp;
mesure MesureCherchee;
int x;

cout<<"nDonner le rang des informations cherchees : ";
cin>>x;
fseek (fp, sizeof(mesure)*x,SEEK_SET);
fread (&MesureCherchee, sizeof(mesure),1,fp);
cout<<"nLes informations lues sont : "<<MesureCherchee.nom<<MesureCherchee.reference<<MesureCherchee.resultat;
}

void main()
{
int x,nb;

cout<<"1 Creer et remplir le fichier mesures"<<"n2 Consulter mesure par son nom"<<"n3 Consulter mesure par son rang dans le fichier mesures"<<endl;
cin>>nb;
switch (nb)
{
case 1:
{
x=1;
while (x!=0)
{
saisie();
do
{
cout<<"nVoulez-vous une nouvelle mesure ? (1 pour oui, 0 pour non) : ";
cin>>x;
}while ((x!=0) && (x!=1));
}
}; break;
/* case 2: */
case 3: rechercherang(); break;
default: cout<<"Erreur de saisie"; break;
}
getch();
}

[/citation]

Je vais voir tes remarques mais j'essaye de faire avec le cours mais ce n'est pas génial
lundi 29 mars 2004 à 22:07:54 | Re : Petit programme basique sur les fichiers mais je ne suis pas doué^^ [c++]

Hylvenir

#include <cstdio>
#include <fstream> // utilise des flux C++
#include <iostream>
using namespace std; // Ajout du namespace

// typedef struct // pas besoin de typedef
struct Mesure
{
// Constructeur par défaut
Mesure() : resultat( 0.0 ) {
nom[0] = '\0'; reference[0] = '\0';
// j'ai un doute sur l'utilité de ça
}

// Construction à partir d'un flux
Mesure( istream& is )
{ // Permet de lire le nom, la référence et le résultat à partir
// d'un flux
// ici, au vu de ce que tu as fait, il faudrait formatter
// la sortie sur 20 puis 15 puis disons 18 chiffres
// pour la mesure vu que tu fais un accès direct ensuite
// par fseek (qui devient seek sur les fichiers)
// l'équivalent de "%20s %15s %18.6lf\n" du C
is >> nom >> reference >> resultat;
}

char nom[20];
char reference[15];
// float resultat;
double resultat; // toujours utiliser des doubles, c'est plus précis

// Méthode pou sauver une mesure
void sauver( ostream& os ) const
{
os << nom << " " << reference << " " << resultat
<< endl; // en général, je ne met pas de endl ici...
// mais ton cas est simple on va dire ;-)
}
}; //mesure;

// chargement d'une mesure
ifstream file( "mesures.txt" );
Mesure m( file );
// affichage d'une mesure
m.sauver( cout );
// enregistrement d'une mesure dans un fichier
ofstream fileOut( "mesures.txt", ios::app );
m.sauver( fileOut );

// la recherche par accès direct est plus délicate
// mais il ne faut pas utiliser sizeof
int position = 3; // 4 ieme élément
file.seekg( 3 * ( 20 + 15 + 18 ); ios::beg );
Mesure m( file );
m.sauver( cout );

J'espère t'avoir aidé un peu ( et pas trop embrouillé ;-) )

PS : Je n'ai rien compilé mais ce ne doit pas être trop loin
de ça.




Cette discussion est classée dans : fichier, ecrire, mesure, fp, mesures


Répondre à ce message

Sujets en rapport avec ce message

probleme pour ecrire dans un fichier en C [ par kekobaron ] Bonjour,Je suis novice en C et je suis confronté à un probleme. Je souhaite enregistrer une phrase dans un fichier mais seul le premier mot est enregi lire / écrire dans un fichier avec une structure [ par M_didi ] Ce que je vais faire exactement c'est créer une fonction qui me permet de créer un fichier "mesures" par le clavier et qui comporte pour chaque mesure Convertion String char* [ par CerberusAbaka ] Bonjour;   Je développe avec Dev C++ un petit exécutable qui converti des PostScript couleur en noir et blanc, tout marche pas trop mal mais j'ait un Aide : pour lire et ecrire des valeurs dans un fichier .txt [ par Elsadar ] Bonjour,Je suis très débutant en C++.Et très récemment j'ai ecris un programme pour calculer les taux de changes.Il me demande sur qu'elle monnaie je Supprimer un tag xml d'un Fichier [ par xtremejames183 ] hello,voila  j'ai un fichier xml qui contient les donnes des utilisateurs avec leur id,login,password voici le contenu lors de la premier creation : Ecrire du WAV dans un AVI avec VFW : AVI to BMP+WAV to AVI [ par vassily8 ] bonjour,je souhaite faire un prog qui lit un fichier AVI, traite les images (filtres...) et me recrée un nouveau fichier AVI avec ces images.Avec les Tracer une courbe a partir de mesures enregistrées dans un fichier ( urgent) [ par aurelien070 ] Dans mon programme il faut que je visualise les mesures provenant de l'oscilloscope numérique sous forme de courbe.Mes mesures sont stockées dans un f charger un fichier sans indiquer le chemin complet ? [ par Batman60 ] salutcomment faire pour accéder à un fichier sans mentionner le chemin complet?le but c'est de pouvoir placer l'exe qui contient ce code n'importe ou ligne de fichier [ par cedric3456 ] salut a tous en c ou c++ peut on lire et ecrire a une ligne donnee dans un fichier texteexemple : ecrire a la ligne n une chaine et lire la ligne n Ecrire un fichier xml [ par nico971gwada ] Salut, Je suis débutant en c++ et je développe sous visual studio 2005 en managé.Je voudrais savoir comment écrire un fichier xml. Est-ce qu'il y a de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,856 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales