IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

programme du suivi de croissance de komate


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut programme du suivi de croissance de komate
    bonjours à tous,
    voilà je suit une formation de programmeur, j'apprend le C et C++. Dans le cadre de cette formation j'ai entrepris d'écrire un rpogramme pour suivre la croissance de ma jeune tortue komate. Le code source que j'ai écrit fonctionne, mais à mon avis, il y a moyen de épurer un peu. J'aurai souhaité vos conseilles pour améliorer ce scrript. Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h> 
    using namespace std;
     main()
    {
    	char NOM_FICHIER[100] = "/var/www/komate/crois.txt";
    	FILE *FICHIER;
    	int DATE;
    	int POID;
    	int TAILLE;
    	do{
    		cout<<"Quelles date sommes nous ?: format JJMMAA\n";
    		cin>>DATE;
    	}while((DATE<010112)||(DATE>311214));
    	do{
    		cout<<"Combien de gramme pese komate ?: \n";
    		cin>>POID;
    	}while((POID<89)||(POID>500));
    	do{
    		cout<<"Combien de millimetre mesure komate ?: \n";
    		cin>>TAILLE;
    	}while((TAILLE<0)||(TAILLE>500));
    	//affichage resultat
    			cout<<"Au " << DATE <<" komate pese "<<POID <<" grammes et mesure "<<
    		TAILLE<<" millimetres \n" <<FICHIER;
    	FICHIER = fopen(NOM_FICHIER, "a");
    	fprintf(FICHIER, "%d 		|	 %d 		|	 %d\n",DATE, POID,TAILLE);
     
     
    	return 0;
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Une chose qui pourrait être bien, ce serait de pouvoir revenir en arrière.
    Une faute de frappe peut toujours arriver.

    Tu pourrais soit proposer un menu pour modifier les paramètres entrés juste avant d'écrire dans le fichier, soit si l'utilisateur tape -1, on revient en arrière.

    Ensuite, pour l'écriture dans ton fichier, je te conseillerais de mettre des \t plutôt que des espaces.

    EDIT : pour ta date, tu ne vérifie pas la validité de la date ex : 12/58/2013 n'est pas valide

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse, je vais continuer à améliorer ce petit programme.

    En effet c'est une super idée de pouvoir modifier le fichier txt si l'utilisateur a commit une faute de frappe. Je vais aussi réfléchir à vérifier de manière efficace la date.
    Merci
    ++

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Un petite remarque de style : Il est rare de voir des MAJUSCULES pour des noms de variable, on réserve plus souvent ça pour des constantes.

    Sinon, tu utilises les flux (cin, cout) pour lire/écrire des informations à l'écran, mais pour écrire dans un fichier, tu utilises une autre technique, issue du C, alors que les flux marchent aussi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <fstream>
    using namespace std;
    int main()
    {
      ofstream fichier("/var/www/komate/crois.txt");
      fichier << "Aujourd'hui " << 42 << endl;
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Merci, encore pour ces quelques conseils et explications. Du coup j'ai apporté un certain nombre de modifications, notamment au niveau de la saisi par l'utilisateur de la date de mesure (Partie de code qui assure la validité de saisi de la date).
    Je n'ai pas trop compris comment utilisé le bout de code que tu as laissé JolyLoïc, c'est dommage parce qu'il m'a l'aire plus simple d'utilisation que le tout le remue ménage de mon code.
    Du coup j'ai réécrit mon code source, compilé, et la...
    le programme se lance
    c'est pas mal j'aime bien.
    Peut-être voyez vous encore des améliorations à apporter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #include <fstream>
     
    using namespace std;
     main()
    {
    	char NOM_FICHIER[100] = "/home/sk8trasher/komate/komate_pousse.txt";
    	FILE *FICHIER;
    	int jour;
    	int mois;
    	int annee;
    	int POID;
    	int TAILLE;
    	do{
    		cout<<"Quelle date sommes nous ? \n";
    		cout<<"Saisir le jour (01, 02, 03, ...30,31) \n";
    		cin>>jour;
    	}while((jour<=0)||(jour>31));
    	do{
    		cout<<"Saisir le mois (01, 02, 03, ...11, 12) \n";
    		cin>>mois;
    	}while((mois<=0)||(mois>31));
    	do{
    		cout<<"Saisir l'annee (2012, 2013, 2014...2049, 2050) \n";
    		cin>>annee;
    	}while(annee<2012);
     
    	cout<< "Nous sommes le" <<jour<<"/"<<mois<<"/"<<annee<<endl;
    	do{
    		cout<<"Combien de gramme pese komate ?: \n";
    		cin>>POID;
    	}while((POID<89)||(POID>500));
    	do{
    		cout<<"Combien de millimetre mesure komate ?: \n";
    		cin>>TAILLE;
    	}while((TAILLE<0)||(TAILLE>500));
    	//affichage resultat
    		cout<<"le " <<jour<<"/"<<mois<<"/"<<annee<<" komate pese "<<POID 
    		<<" grammes et mesure "<<TAILLE<<" millimetres \n" <<FICHIER;
    		FICHIER = fopen(NOM_FICHIER, "a");
    		fprintf(FICHIER,"%d\t%d\t%d\t%d\t%d\t\n",jour, mois, annee, POID,TAILLE);
    	return 0;
    }

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * NOM_FICHIER = "/home/sk8trasher/komate/komate_pousse.txt";
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char NOM_FICHIER[100] = "/home/sk8trasher/komate/komate_pousse.txt";
    me semble plus intéressant car tu ne prend que l'espace dont tu as besoin (en plus, il ne me semble pas que tu modifie ta chaîne de caractère).

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Quitte à faire de C++, autant utiliser un string.

    Citation Envoyé par sk8trasher Voir le message
    Peut-être voyez vous encore des améliorations à apporter ?
    Fermer le fichier: fclose(FICHIER) à la fin?
    Pour mieux comprendre le code de JolyLoic, tu peux regarder la Manipulation des fichiers. La syntaxe pour écrire reste la même que pour cout.

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    S'il fait un fopen, quel utilité d'utiliser un string pour ensuite utiliser :

    mon_string.c_str() pour convertir en char * pour le fopen?

  9. #9
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    La solution de JolyLoic n'est pourtant pas trop chinoise, à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FICHIER = fopen(NOM_FICHIER, "a");
    		fprintf(FICHIER,"%d\t%d\t%d\t%d\t%d\t\n",jour, mois, annee, POID,TAILLE);
    tu mets (et tu n'oublies pas d'inclure <fstream>) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      ofstream fichier(NOM_FICHIER);
      fichier << jour << '\t' << mois << '\t' << annee << '\t' << poid << '\t' << taille << std::endl;
    le std::endl remplace le '\n' (que tu peux quand même utiliser si besoin...)

    D'autre part, pour améliorer ton programme il serait peut-être intéressant d'utiliser des fonctions pour isoler les saisies utilisateurs.

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    En même temps, s'il apprend le C/C++, je pense qu'il va essayer d'utiliser ces deux langages dans un même programme pour tester ses connaissances.
    D'où l'utilisation de son "fopen"

    Si je peux me permettre, il vaudrait mieux qu'il étudie ces deux langages séparément.

    Car le jour où il faudra pour une raison X ou Y compiler en C, il ne pourra plus utiliser les fonctions C++ et il risque de se retrouver assez déboussolé.

    Puis à faire des mixtes des deux langages, certes ça compile et ça marche, mais, c'est assez dangereux de les mélanger comme cela en effet, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string *test = malloc(sizeof(string));
    a toute les chances de faire un SEGFAULT plus tard.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Puis à faire des mixtes des deux langages, certes ça compile et ça marche, mais, c'est assez dangereux de les mélanger comme cela en effet, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string *test = malloc(sizeof(string));
    a toute les chances de faire un SEGFAULT plus tard.
    C'est surtout n'importe quoi de mettre dans un pointeur typé classe l'adresse d'une zone allouée avec malloc sur laquelle aucune initialisation n'a été faite vu que malloc n'appelle pas le constructeur...d'ailleurs pour une chaine locale pas besoin de faire de l'allocation dynamique avec tous les risques de bévues que cela comporte

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par therwald Voir le message
    C'est surtout n'importe quoi de mettre dans un pointeur typé classe l'adresse d'une zone allouée avec malloc sur laquelle aucune initialisation n'a été faite vu que malloc n'appelle pas le constructeur...d'ailleurs pour une chaine locale pas besoin de faire de l'allocation dynamique avec tous les risques de bévues que cela comporte

    C'est justement pour cela qu'il ne faut pas mélanger le C et le C++.
    En C++ certaines variables sont initialisées à leur déclaration ce qui n'est pas le cas en C.
    Ensuite, certes, il n'y a pas besoin de faire de l'allocation dynamique pour une chaine locale, mais ce n'est qu'un exemple d'erreur possible lorsqu'on mélange C et C++ comme cela. Qu'on ai pas besoin de le faire n'importe peu, ce n'est qu'un exemple de ce qu'il ne faut pas faire.

  13. #13
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    /!\ Ne pas utiliser ce message si l'on ne sais pas exactement ce que l'on fait /!\

    Juste pour contredire (mais le principe reste bien le même) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string *test = reinterpret_cast<std::string *>(malloc(sizeof(std::string)));
    new (test) std::string;

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Certes...mais le placement new (qui reste un new) est un cas particulier pour traiter des besoins particuliers de gestion d'allocation...peu pédagogique de citer ça à un débutant en parlant d'une chaine dans la main d'une application aussi simple.

  15. #15
    Membre régulier Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Points : 89
    Points
    89
    Par défaut
    Là, vous l'embrouillez plus qu'autre chose les gars

    Si tu veux vraiment être clair avec la date, il faudrait vérifier d'autres choses (31 février est possible avec ton code).
    Si tu souhaites être au point avec ton code, je te conseille de créer une fonction qui vérifiera ta date (selon le mois, et même selon l'année (bissextile ou non)). C'est beaucoup plus poussé, mais ca pourrait t'apprendre à créer une fonction et à l'utiliser
    Dans le monde, il y a 10 types de personnes. Ceux qui comprennent ce message et les autres

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Entièrement d'accord avec toi
    peu pédagogique de citer ça à un débutant
    @sk8trasher:
    Pour faire simple, quand tu fais de la réservation manuelle de mémoire (allocation dynamique) soit tu fais du C et tu utilises malloc (! libérer avec free()), soit tu fais du C++ et tu utilises new (! libérer avec delete). Mais surtout pas de mélange des deux...

    Que tu fasses du C ou du C++, évites au maximum de réserver et libérer manuellement la mémoire, c'est source de bugs car on a vite fait de commettre une erreur....

    Dans ton cas, le plus efficace est d'utiliser une constante en laissant le compilateur s'occuper de son stockage, comme suggéré par Neckara:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * NOM_FICHIER = "/home/sk8trasher/komate/komate_pousse.txt";

  17. #17
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Citation Envoyé par therwald Voir le message
    Certes...mais le placement new (qui reste un new) est un cas particulier pour traiter des besoins particuliers de gestion d'allocation...peu pédagogique de citer ça à un débutant en parlant d'une chaine dans la main d'une application aussi simple.
    C'est sûr que c'était une mauvaise idée. Mais je ne peux pas m'empêcher de contredire quand je vois l'histoire de segfault.
    Bref, je vais ajouter un panneau d'attention à mon message précédent, ça réglera le problème.

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    euh j'avais un peu oublié ce topic ! et je viens de lire toutes les réponses qui ont été émises depuis mon absence et ces dernières offrent beaucoup de possibilité d'évolution (formation)de ce programme . Notamment le contrôle de la date si l'année est bissextile

    Je suit toujours ma formation, et je reviens plus en détail sur le C, n'étant pas déjà d'attaque pour le C++.

    Cet après midi j'ai réalisé les mesures de komate, et je me suis replongé sur mon script source. J'ai voulu le convertir en C(sans toutes les extensions farfelu que je vais développer), mais je n'arrive pas à mettre a ajouté une nouvelle ligne pour chaque nouvelles saisie.
    Lorsque je lance le programme efface les données précédemment écrite.
    Code Version C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #include <fstream>
     
    using namespace std;
     main()
    {
    	char NOM_FICHIER[100] = "/home/user/komate/komate_pousse.txt";
    	FILE *FICHIER;
    	int jour;
    	int mois;
    	int annee;
    	int POID;
    	int TAILLE;
    	do{
    		cout<<"Quelle date sommes nous ? \n";
    		cout<<"Saisir le jour (01, 02, 03, ...30,31) \n";
    		cin>>jour;
    	}while((jour<=0)||(jour>31));
    	do{
    		cout<<"Saisir le mois (01, 02, 03, ...11, 12) \n";
    		cin>>mois;
    	}while((mois<=0)||(mois>31));
    	do{
    		cout<<"Saisir l'annee (2012, 2013, 2014...2049, 2050) \n";
    		cin>>annee;
    	}while(annee<2012);
     
    	cout<< "Nous sommes le" <<jour<<"/"<<mois<<"/"<<annee<<endl;
    	do{
    		cout<<"Combien de gramme pese komate ?: \n";
    		cin>>POID;
    	}while((POID<85)||(POID>500));
    	do{
    		cout<<"Combien de millimetre mesure komate ?: \n";
    		cin>>TAILLE;
    	}while((TAILLE<0)||(TAILLE>500));
    	//affichage resultat
    		cout<<"le " <<jour<<"/"<<mois<<"/"<<annee<<" komate pese "<<POID
    		<<" grammes et mesure "<<TAILLE<<" millimetres \n" <<FICHIER;
    		FICHIER = fopen(NOM_FICHIER, "a");
    		fprintf(FICHIER,"%d\t%d\t%d\t%d\t%d\t\n",jour, mois, annee, POID,TAILLE);
     
    	return 0;
    }

    Avant d'étudier le C++, mon prof ma conseillé de revoir le C tout court. Voici une version C du suivi de croissance de komate mais le ne programme n'écrit pas à la suite du fichier <br>
    J'ai essayé d'utilisé une structure, il n'y a aucun intérêt, mais je voulais essayé.
    Code komate en C (essai nouvelle version) : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct {
    char date [9];
    int poid;
    int taille;
    } komate;
    int main() {
    FILE *p_fichier; /* pointeur fichier */
    /* Créer et remplir le fichier */
    p_fichier = fopen("komate_croissance.txt","w");
    if (p_fichier == NULL) {
    printf("\aImpossible de créer le fichier \n");
    exit(-1); // Abandonner le programme
    }
    komate p;
    printf("Veuillez entrer la date des mesures (JJ/MM/AA):");
    scanf("%s",p.date);
    printf("Veuillez entrer le poid de Komate ( en gramme):");
    scanf("%d",&p.poid);/* ne pas oublier le & !!! */
    printf("Veuillez entrer la taille de Komate ( en millimetre ):");
    scanf("%d",&p.taille); /* ne pas oublier le & !!! */
    fprintf(p_fichier, "%s      ",p.date);
    fprintf(p_fichier, "%d      ",p.poid);
    fprintf(p_fichier, "%d      ",p.taille);
    fclose(p_fichier);
    return 0;
    }

    Et quand même , pour ceux que ca intérressent voici les résultats observés ces derniers mois:

    Code komate_pousse.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    14	1	2012	85	59	
    20	1	2012	85	59	
    4	2	2012	85	59	
    28	3	2012	85	61

  19. #19
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FICHIER = fopen(NOM_FICHIER, "a");
    Théoriquement, l'écriture devrait se faire à la suite, je suis perplexe.

    As-tu essayer de faire un ftell pour savoir où se situe la tête de lecture lors de l'ouverture du fichier en append?

    Si tu n'es pas à la fin de ton fichier, tu pourra toujours te positionner à la fin de celui-ci avec fseek()

    Par contre n'oublie pas le

    NB : désolé, je regardais la mauvaise version,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p_fichier = fopen("komate_croissance.txt","w");
    va effacer ton fichier dès que tu commencera à écrire si je ne dit pas de bêtises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p_fichier = fopen("komate_croissance.txt","a");

  20. #20
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    J'en ai profité des réponses postées pour les prendre en considération, pour le développement de mon application du suivi de croissance de ma tortue.
    J'ai modifier les variable écrite en majuscule en minuscule. remplacement de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FICHIER = fopen(NOM_FICHIER, "a");
    		fprintf(FICHIER,"%d\t%d\t%d\t%d\t%d\t\n",jour, mois, annee, POID,TAILLE);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ofstream fichier(NOM_FICHIER);
    		fichier << jour << '\t' << mois << '\t' << annee << '\t' << poid << '\t' << taille << std::endl;
    C'est cool, ça compile par contre j'ai le même problème que dans mon post précédant: lorsqu'on exécute le prog, les nouvelles saisies écrase le fichier existant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #include <fstream>
     
    using namespace std;
     main()
    {
    	char *NOM_FICHIER = "/home/user/komate/komate_pousse.txt";
    	FILE *FICHIER;
    	int jour;
    	int mois;
    	int annee;
    	int poid;
    	int taille;
    	do{
    		cout<<"Quelle date sommes nous ? \n";
    		cout<<"Saisir le jour (01, 02, 03, ...30,31) \n";
    		cin>>jour;
    	}while((jour<=0)||(jour>31));
    	do{
    		cout<<"Saisir le mois (01, 02, 03, ...11, 12) \n";
    		cin>>mois;
    	}while((mois<=0)||(mois>31));
    	do{
    		cout<<"Saisir l'annee (2012, 2013, 2014...2049, 2050) \n";
    		cin>>annee;
    	}while(annee<2012);
     
    	cout<< "Nous sommes le" <<jour<<"/"<<mois<<"/"<<annee<<endl;
    	do{
    		cout<<"Combien de gramme pese komate ?: \n";
    		cin>>poid;
    	}while((poid<85)||(poid>500));
    	do{
    		cout<<"Combien de millimetre mesure komate ?: \n";
    		cin>>taille;
    	}while((taille<0)||(taille>500));
    	//affichage resultat
    		cout<<"le " <<jour<<"/"<<mois<<"/"<<annee<<" komate pese "<<poid
    		<<" grammes et mesure "<<taille<<" millimetres \n" <<FICHIER;
    		ofstream fichier(NOM_FICHIER);
    		fichier << jour << '\t' << mois << '\t' << annee << '\t' << poid << '\t' << taille << std::endl;
     
    	return 0;
    }

Discussions similaires

  1. Morceau de programme : suivi de pièce
    Par Percolateur dans le forum Automation
    Réponses: 1
    Dernier message: 17/03/2014, 11h12
  2. Programme de suivi simultané de plusieurs objets colorés
    Par infiniteLoop dans le forum OpenCV
    Réponses: 0
    Dernier message: 09/06/2013, 11h16
  3. Réponses: 4
    Dernier message: 20/01/2013, 12h50
  4. suivi structurel de la programmation dynamique
    Par m_baadeche dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 04/12/2010, 13h09
  5. Réponses: 3
    Dernier message: 20/06/2008, 00h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo