Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 15h55   #1
lul0ux
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant
Secteur : Bâtiment

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 0
Points : 0
Par défaut Modification d'un fichier

Bonjour à tous !

Dans le cadre de mes études il m'est demandé de créer un projet en C++, celui-ci doit permettre a un utilisateur lambda de pouvoir creer, repondre et consulter les résultats d'un sondage.

Cependant j ai un petit soucis lorsque mon utilisateur doit répondre au sondage.
En effet j ai crée un fichier avec toutes les réponses de l'utilisateur et ce pour chaque sondage. Cependant ce fichier doit pouvoir être modifié et ce a chaque fois qu'un nouvel utilisateur y répond mais je ne vois pas qu'elle pourrait être la démarche.


Pour vous expliquer un peu plus en detail j utilise ce fichier au sein d'une fonction , j'ouvre le fichier des données en lecture
Code :
1
2
3
 
FILE*fichierd;
fichierd=fopen(strcat(d,"donnees.txt"),"r");
Suivi par une suite de scanf pour la lecture des données du fichier :
Code :
1
2
3
4
5
6
7
 
fscanf (fichierd,"%d",&x.compteur);
fscanf (fichierd,"%d",&x.nbfemme);
fscanf (fichierd,"%d",&x.nbhomme);
fscanf (fichierd,"%d",&x.nbage);
 
fclose(fichierd);
ensuite l'utilsateur repond aux questions
ex ;
Code :
1
2
3
4
5
6
7
8
9
10
cout<<"Etes vous une femme ou un homme ?"<<endl;
cout<<"Cliquez 1 si vous etes une femme"<<endl;
cout<<"Cliquez 2 si vous etes un homme"<<endl;
cin>>sexe;
    if(sexe==1){
    x.nbfemme=x.nbfemme+1;
    }
    if (sexe==2){
    x.nbhomme=x.nbhomme+1;
    }
=>incrementation

Ensuite le fichier et réouvert afin de modifier les données en les incrémentant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
fichierd=fopen(strcat(d,"donnees.txt"),"w");
 
 
fprintf (fichierd,"%d",x.compteur);
fputc('\n',fichierd);
fprintf (fichierd,"%d",x.nbfemme);
fputc('\n',fichierd);
fprintf (fichierd,"%d",x.nbhomme);
fputc('\n',fichierd);
 
 
fclose(fichierd);
Or lorsque j exécute mon programme mon fichier avec mes données ne prend en compte que les résultats du dernier utilisateur or bien entendu pour ensuite pouvoir afficher des pourcentages il me faut bien sur les résultats de chaque utilisateur or je pensais qu en effectuant une lecture du fichier et en utilisant des incrémentations cela aurait marché or ce n 'est pas le cas.


Je peux vous envoyer le programme si vous souhaitez plus de détails mais j’espère avoir été suffisamment claire

Merci pour idées si vous en avez !
lul0ux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 17h03   #2
imperio
Membre éclairé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 361
Points : 361
Tu devrais lire plus en détail le man de fopen. Le flag w ouvre le fichier en mode écriture et efface son contenu. Pour écrire à la fin sans tout effacer, je te laisse chercher dans le man quel est le bon flag.

PS: tu pourrais laisser ton fichier ouvert quand t'as fini de lire les infos, le curseur sera déjà à la fin. Mais pour ça il faudra qu'il soit déjà ouvert en mode lecture / écriture.
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 18h03   #3
djuju
Membre éprouvé
 
Homme Julien
Chef de projet R&D
Inscription : mars 2007
Messages : 183
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : Canada

Informations professionnelles :
Activité : Chef de projet R&D

Informations forums :
Inscription : mars 2007
Messages : 183
Points : 408
Points : 408
Salut,

A mon avis, le plus simple est de ne pas garder les résultats compilé dans ton fichier. Enregistre simplement les réponses sur une nouvelle ligne.
Ainsi, pour consulter les résultats, il suffit de parcourir le fichier et de compter le nombre d'hommes est de femmes. La somme des 2 te donnant le nombre de répondants.
Pour ajouter un résultat, il suffit d'ouvrir le fichier en append (flag a ou a+), et d'ajouter la réponse de l'utilisateur.
Si ton sondage à plusieurs questions, tu peux mettre toute les réponses d'un utilisateur sur une même ligne en les séparant par des ";". C'est bien sur plus propre que de les mettre séquentiellement et de devoir compter les lignes pour savoir à quelle question une réponse appartient.
Enfin, n'écris les résultats dans le fichier que lorsque l'utilisateur à répondu à toutes les questions. Ca t'assurera que tu ne tiens compte que des utilisateurs ayant répondu à l’assemble du questionnaire (si c'est bien le comportement que tu veux).
djuju est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 14h42   #4
lul0ux
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant
Secteur : Bâtiment

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 0
Points : 0
Bonjour

Pour répondre à imperio j ai choisi d ouvrir mon fichier en W justement afin que mes incrémentations puissent se faire sur mes variables de mon fichier et donc ne pas m afficher les résultats de chaque sondage à la suite et justement je n arrive pas à les incrémenter à chaque fois que j ouvre mon fichier de données il ne me prend en compte que les résultats de la dernière personne sondée voilà mon problème

Pour répondre à djuju merci de m avoir fait pensé au fait de ne prendre en compte les résultats du sondage que lorsque la personne a fini le sondage
lul0ux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 14h46   #5
imperio
Membre éclairé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 361
Points : 361
Hum... Fort étrange... En gros si un homme puis une femme font se sondage, au final il n'y aura qu'une femme de compter et l'homme sera passé à la trappe. T'as déjà regardé si les valeurs que tu récupérais de ton fichier était les bonnes ? Le problème pourrait venir de là.
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 15h46   #6
lul0ux
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant
Secteur : Bâtiment

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 0
Points : 0
Bonjour,



Mon fichier de données me reprend bien les bons resultats mais seulement de la dernière personne qui y a répondu comme tu l as noté auparavant !
lul0ux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 15h53   #7
imperio
Membre éclairé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 361
Points : 361
Dans ce cas il doit manquer quelque chose parce que ça ne me paraît pas logique. Le raisonnement est bon, d'après ce que tu me dis les valeurs sont bien récupérées. Dans ce cas d'où pourrait provenir le problème ? Tu as affiché toutes les valeurs à chaque modification pour voir si tout se passait correctement ?
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 16h05   #8
lul0ux
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant
Secteur : Bâtiment

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 0
Points : 0
Oui à chaque fois que je reponds au sondage les données sont bien modifées mais il ne me prend pas en compte les resultats précédents !
lul0ux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 12h23   #9
jblecanard
Membre Expert
 
Jean-Bernard
Inscription : mars 2007
Messages : 1 001
Détails du profil
Informations personnelles :
Nom : Jean-Bernard
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 1 001
Points : 1 628
Points : 1 628
Salut lulOux

Tu ne fais pas du C++ ici, tu manipules tes fichiers avec l'API C. Tu devrais jeter un oeil sur la FAQ et refaire ton programme à la sauce C++.

L'API C est-elle imposée par ton professeur ?
jblecanard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h10   #10
lul0ux
Invité de passage
 
Femme
Étudiant
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant
Secteur : Bâtiment

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 0
Points : 0
Bonjour,



Non l'API C n'est pas imposé je t'avouerai même que je ne connais pas du tout ce terme !

Je vais demander à mon professeur tout à l'heure pourquoi ca ne marche pas car je pense que le problème vient au niveau de l'ouverture du fichier et de la lecture des données car finalement en transformant un peu le programme j'ai bien vu qu il me faisait bien l’incrémentation mais le problème c'est qu'il me prend toutes mes données du fichier comme étant égales à 0
lul0ux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 14h18   #11
r0d
Expert Confirmé Sénior
 
Inscription : août 2004
Messages : 3 672
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : août 2004
Messages : 3 672
Points : 4 434
Points : 4 434
Ce que dit jblecanard, c'est que les structures et les fonctions que tu utilises pour manipuler tes fichiers (FILE*, fopen, etc.) c'est du C, et non pas du C++. Tout ceci est encore présent dans c++ pour des raisons de compatibilités. Quitte à apprendre le c++, autant apprendre le c++, et non le c.

Pratiquement, au lieu de FILE* on utilisera la classe fstream et ses dérivés. Et au lieu de fscanf et fprintf, on utilisera les opérateurs de flux (<< et >>), comme avec cin et cout.
r0d est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web