Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LECTURE ÉCRITURE DONNÉES


Information sur la source

Catégorie :Fichiers / Disque Niveau : Débutant Date de création : 30/08/2004 Date de mise à jour : 31/08/2004 09:51:08 Vu : 3 724

Note :
5 / 10 - par 2 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

Description

Voici ma source, avis a ceux qui veulent tester...
 

Source

  • //MPBC_C fichier : 'miaou.cpp' traité par le MetaProgramme MétaProg de Bruno CELLE - vers 5.0.4
  • /// ----- MaJ le 31/08/04 : par bethany & magic_nono
  • /// ----- Créé le 30/08/04 : par bethany & magic_nono
  • /// ----- Objectif général : TODO
  • /// ----- Développé pour : 1 exercice C...
  • /// ----- Chemin original : C:\Documents and Settings\Luc\Bureau\miaou.cpp
  • /// ----- Nota: dans InOut peuvent être repérées des var In : aucun indice formel ne permet de noter le masquage du passage par parametre... ex : f(T i){i++;} a un effet différent si T:int ou \"#define T int&\".
  • #include <stdlib.h>
  • #include <stdio.h>
  • #define MAX 1024
  • main()
  • {
  • /// ----------------------------------------
  • /// ---------------- main() ----------------
  • /// ----------------------------------------
  • /// ----- Objectif : Lanceur du projet
  • /// ----- Auteur(s) : bethany & magic_nono 31/08/04
  • /// ----- PreCond : /
  • /// ----- PostCond : /
  • /// ----- Etat : 1 (-1<0<1<2)
  • /// ----------------------------------------
  • /// ----- Var Internes à la fonction (3) : buffer ,fp ,saisie
  • /// ----- Var Utilisées par adresse (1) : buffer
  • /// ----- Var Masquées (2) : buffer ,fp
  • /// ----- Var In Globales Constantes (1) : EOF
  • FILE*fp;
  • double saisie;
  • char buffer[512];
  • {
  • fp=fopen("C:\\fichier.txt","w");
  • if(fp == NULL)
  • {
  • fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
  • return-1;
  • }
  • printf("\tSortie avec 0\n\n ");
  • while(saisie!= 0)
  • {
  • printf("Tapez un nombre: ");
  • fflush(stdout);
  • fflush(stdin);
  • fgets( buffer, sizeof buffer, stdin );
  • fflush(stdin);
  • fflush(stdout);
  • saisie=atof(buffer);
  • if(saisie != 0)
  • fprintf(fp,"%f\n", saisie);
  • }
  • fclose(fp);
  • }
  • {
  • fp=fopen("C:\\fichier.txt","r");
  • if(fp == NULL)
  • {
  • fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
  • return-1;
  • }
  • while(fgets( buffer, sizeof buffer, fp))
  • {
  • saisie=atof(buffer);
  • printf("%f\n", saisie);
  • }
  • fclose(fp);
  • }
  • return 0;
  • }
//MPBC_C fichier : 'miaou.cpp' traité par le MetaProgramme MétaProg de Bruno CELLE - vers 5.0.4
/// ----- MaJ le 31/08/04 : par bethany & magic_nono
/// ----- Créé le 30/08/04 : par bethany & magic_nono
/// ----- Objectif général : TODO
/// ----- Développé pour : 1 exercice C...
/// ----- Chemin original  : C:\Documents and Settings\Luc\Bureau\miaou.cpp
/// ----- Nota: dans InOut peuvent être repérées des var In : aucun indice formel ne permet de noter le masquage du passage par parametre... ex : f(T i){i++;} a un effet différent si T:int ou \"#define T int&\".

#include <stdlib.h>
#include <stdio.h>
#define MAX 1024



main()
{
/// ----------------------------------------
/// ---------------- main() ----------------
/// ----------------------------------------
/// -----  Objectif : Lanceur du projet
/// -----  Auteur(s) : bethany & magic_nono 31/08/04
/// -----  PreCond : /
/// -----  PostCond : /
/// -----  Etat : 1 (-1<0<1<2)
/// ----------------------------------------
/// -----  Var Internes à la fonction (3) : buffer ,fp ,saisie
/// -----  Var Utilisées par adresse (1) : buffer
/// -----  Var Masquées (2) : buffer ,fp
/// -----  Var In  Globales Constantes (1) : EOF

	FILE*fp;
	double saisie;
	char buffer[512];
	
	{
		fp=fopen("C:\\fichier.txt","w");
		if(fp == NULL)
		{
			fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
			return-1;
		}
		printf("\tSortie avec 0\n\n ");
		while(saisie!= 0)
		{
			printf("Tapez un nombre: ");
			fflush(stdout);
			fflush(stdin);
			fgets( buffer, sizeof buffer, stdin );
			fflush(stdin);
			fflush(stdout);
			saisie=atof(buffer);
			if(saisie != 0)
				fprintf(fp,"%f\n", saisie);
		}

		fclose(fp);
	}

	{
		fp=fopen("C:\\fichier.txt","r");
		if(fp == NULL)
		{
			fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
			return-1;
		}
		while(fgets( buffer, sizeof buffer, fp))
		{
			saisie=atof(buffer);
			printf("%f\n", saisie);
		}
		fclose(fp);
	}
	return 0;
}

Conclusion

Programme qui récupere des données a l'écran, puis les ecrit sur un fichier, puis va les relire pour les afficher à l'écran.
Merci a Magic_Nono pour son aide :)
 

Historique

30 août 2004 17:27:31 :
30 août 2004 17:48:47 :
31 août 2004 09:27:35 :
31 août 2004 09:51:08 :

Commentaires et avis

signaler à un administrateur
Commentaire de magic_Nono le 30/08/2004 16:59:49

k tes comparaisons doivent etre pour des float
=> pas de guillemet !!!

signaler à un administrateur
Commentaire de djl le 30/08/2004 17:10:20

et 0.f en c, et verifie le mode d'ouverture du fichier et commence par apprendre le c (au moins quelques bases) car ca ne te servira a rien si on te donne le code tout cuit

signaler à un administrateur
Commentaire de bethany le 30/08/2004 17:16:38

Mais j'en fais du c, t'es marrant toi !!!!

Oui j'ai pas vérif la 2eme fois l'ouverture, je demandais de l'aide parce que je voyais pas comment traiter le probleme...
Ya quelque petit truc que je connais pas super (genre nous en cours on avait vu le %5.2f par exemple et pas %0.f ),
mais ce n'est pas parce que j'y arrive pas super ke je connais pas le C, j'en connais une partie, et pas tout c sur...

signaler à un administrateur
Commentaire de magic_Nono le 30/08/2004 17:16:54

soluce :


#include <stdlib.h>
#include <stdio.h>
#define MAX 1024
main()
{
FILE *fp; // pointeur sur le fichier a ecrire
double saisie; // var pour la saisie
char buffer[512];

{
    fp=fopen("C:\\fichier.txt", "w");
    
    if(fp == NULL)
    {
        printf("Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
        return -1;
    }
printf("\tSortie avec 0\n\n ");

    while(saisie!= 0) // boucle de saisie
    {
        printf("Tapez un nombre: ");
        //
//if( sscanf( buffer, "%f" , &saisie ) == EOF ) continue;
        fflush(stdout);
        fflush(stdin);
        //scanf("%f", &saisie); // on range saisie dans variable
fgets( buffer, sizeof buffer, stdin );

fflush(stdin);
        fflush(stdout);
        //if( scanf("%f", &saisie) == EOF )
// while( fgetc(stdin) != EOF );

saisie=atof(buffer);
        if(saisie != 0) // si different de 0
        {
            fprintf(fp, "%f\n", saisie); // ecrirture du nombre dans le fichier
        }
    }
        fclose(fp);
}

{
    fp=fopen("C:\\fichier.txt", "r");
     while(fgets( buffer, sizeof buffer, fp))
{
if(buffer[0]!=EOF)
{
// fscanf(fp, "%f", &saisie);
saisie=atof(buffer);
printf("%f\n", saisie);
}
    }
fclose(fp);
}
return 0;

}

Voila
Magic_nono

signaler à un administrateur
Commentaire de bethany le 30/08/2004 17:17:56

Et puis la je ne sais pas trop quoi garder, quoi virer... c'est pour ca que cela fait 'brouillon' ...

signaler à un administrateur
Commentaire de magic_Nono le 30/08/2004 17:22:07

ben t'a la soluce, vire les com si tu ve


++
beth

signaler à un administrateur
Commentaire de bethany le 30/08/2004 17:26:45

Merci pour la source mais je ne comprend pas certaines choses, je vais les notées en vert sur ma source que je vais modifier maintenant...

signaler à un administrateur
Commentaire de BruNews le 30/08/2004 17:41:38 administrateur CS

Rappel:

ne pas confondre une source sur CS et un exercice perso. On dira qu'ici ça entrait dans la seconde categorie.

BruNews, Admin CS, MVP VC++

signaler à un administrateur
Commentaire de magic_Nono le 30/08/2004 17:54:44

C clair

signaler à un administrateur
Commentaire de bethany le 30/08/2004 18:12:02

J'ai modifié :)
c'est mieux ainsi :) ;)

signaler à un administrateur
Commentaire de magic_Nono le 30/08/2004 18:17:18

if(buffer[0]!=EOF)
est inutil

++

signaler à un administrateur
Commentaire de djl le 30/08/2004 18:31:00

bethany > tu fais du c depuis combien de temps ? parce que ca s'apprends pas en une semaine de cours...

pour moi les trucs du genre

fp=fopen("C:\\fichier.txt", "w"); (il faut ouvrir en lecture)
ou
fflush(stdin);
montrent qu'il y a encore quelques trucs que tu n'a pas compris

et ne créer pas de blocs inutilent ! (surtout sans savoir ce que ca implique)

signaler à un administrateur
Commentaire de bethany le 31/08/2004 09:25:29

Bah ca va faire un an que je fais du C (sachant que je suis en alternance 2 mois 2 mois soit 6 mois de C avec 3 heures par semaines) et bien je sais ce qu'est fopen (la premiere fois qu'on l'ouvre faut bien écrire dedans, regarde bien) et le ffliush c'est écrit dans mon cours mais on ne l'a pas encore étudié !!!
Et j'avoue l'histoire des blocs, j'ai pas trop saisi, on a pas vu ca en cours !!!!

signaler à un administrateur
Commentaire de magic_Nono le 31/08/2004 09:41:16

kikou

ce qu'il appelle des blocs c'est les jeux d'accolades...

Sinon, ça remarque n'est pas très explicite, je pense qu'il précisera exactement ce qu'il veux dire par là.

Pour ne pas te perturber, j'ai conservé la majorité de ton code d'origine et n'ai pas tout réécrit...

Bon, je passe ça par la moulinette MétaProg et je te donne un résultat qui ira encore mieu...

(seule modif manuelle : stderr...)

[code]
//MPBC_C fichier : 'miaou.cpp' traité par le MetaProgramme MétaProg de Bruno CELLE - vers 5.0.4
/// ----- MaJ le 31/08/04 : par bethany & magic_nono
/// ----- Créé le 30/08/04 : par bethany & magic_nono
/// ----- Objectif général : TODO
/// ----- Développé pour : 1 exercice C...
/// ----- Chemin original  : C:\Documents and Settings\Luc\Bureau\miaou.cpp
/// ----- Nota: dans InOut peuvent être repérées des var In : aucun indice formel ne permet de noter le masquage du passage par parametre... ex : f(T i){i++;} a un effet différent si T:int ou \"#define T int&\".

#include <stdlib.h>
#include <stdio.h>
#define MAX 1024



main()
{
/// ----------------------------------------
/// ---------------- main() ----------------
/// ----------------------------------------
/// -----  Objectif : Lanceur du projet
/// -----  Auteur(s) : bethany & magic_nono 31/08/04
/// -----  PreCond : /
/// -----  PostCond : /
/// -----  Etat : 1 (-1<0<1<2)
/// ----------------------------------------
/// -----  Var Internes à la fonction (3) : buffer ,fp ,saisie
/// -----  Var Utilisées par adresse (1) : buffer
/// -----  Var Masquées (2) : buffer ,fp
/// -----  Var In  Globales Constantes (1) : EOF

FILE*fp;
double saisie;
char buffer[512];
{
fp=fopen("C:\\fichier.txt","w");
if(fp == NULL)
{
fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
return-1;
}
printf("\tSortie avec 0\n\n ");
while(saisie!= 0)
{
printf("Tapez un nombre: ");
fflush(stdout);
fflush(stdin);
fgets( buffer, sizeof buffer, stdin );
fflush(stdin);
fflush(stdout);
saisie=atof(buffer);
if(saisie != 0)
fprintf(fp,"%f\n", saisie);
}
fclose(fp);
}
{
fp=fopen("C:\\fichier.txt","r");
if(fp == NULL)
{
fprintf(stderr,"Impossible d'ouvrir le fichier desire.\nVerifier que le fichier existe bien.");
return-1;
}
while(fgets( buffer, sizeof buffer, fp))
{
saisie=atof(buffer);
printf("%f\n", saisie);
}
fclose(fp);
}
return 0;
}
[/code]

signaler à un administrateur
Commentaire de djl le 31/08/2004 14:15:08


je voulais juste dire de ne pas creer de blocs inutiles, ce ne peut que reduire la lisibilité du code ( ca sert surtout pour etablir ceraines regles de portées ou pour les structures de controles)

ne fais jamais fflush(stdin)


saisie=atof(buffer);
if(saisie != 0)
fprintf(fp,"%f\n", saisie);

0 est un entier, 0.0 est un double, et tu fais comment si justement le reel lu est 0 ? utilises plutot sscanf si tu veux gérer l'erreur pour de vrai

jamais de printf pour afficher une simple chaine (sans formatage), c'est plus rapide avec puts()
pareil pour fprintf(stderr, "..." ), fais plutot
fputs( "...", stderr)

signaler à un administrateur
Commentaire de bethany le 31/08/2004 14:21:36

Bah le 0 fait sortir... :s

signaler à un administrateur
Commentaire de djl le 31/08/2004 14:28:35

oui, ok

le probleme avec les fonctions ato*, c'est que ca retourne 0 en cas d'erreur, on ne peut pas savoir si il y a reelement  une erreur

signaler à un administrateur
Commentaire de magic_Nono le 31/08/2004 14:30:38

djl> k
ceci po compris ton histoire de fopen

djl> saurais tu récupérer avec un scanf directement le nb???
ça marche po vraiement en fait

C pr ça que j'aV mis les fflush...

++

signaler à un administrateur
Commentaire de djl le 31/08/2004 14:39:49

pour le fopen je m'etais tromper (j'avais pas vu qu'il ecrivais d'abord dedans)


while(saisie!= 0)
{
printf("Tapez un nombre: ");
fflush(stdout);

fgets( buffer, sizeof buffer, stdin );

if( sscanf( buffer, "%f", &saisie) == EOF ) continue;

if(saisie != 0)
fprintf(fp,"%f\n", saisie);
}

de toute facon fflush(stdin) est une erreur

signaler à un administrateur
Commentaire de magic_Nono le 31/08/2004 14:48:53

ui, je C C mieu comme ça
j'aurai voulu voir sans passer par un buffer

un truc du style
scanf("%f", &saisie);

signaler à un administrateur
Commentaire de djl le 31/08/2004 14:53:13

if( scanf( "%f", &saisie) == EOF )
{
while( getc(stdin) != EOF );
continue;
}


mais avec un buffer c'est mieux, c'est plus logique

signaler à un administrateur
Commentaire de magic_Nono le 31/08/2004 14:55:46

getc
tu passe tjs par des car !!!!
mé je crois qu'en fait, on a po le choix

merci
++

signaler à un administrateur
Commentaire de djl le 31/08/2004 15:02:23

si tu fais juste

scanf( "%f", &saisie)

ca risque de boucler à l'infinie en cas d'erreur de saisie

signaler à un administrateur
Commentaire de bethany le 31/08/2004 15:08:46

J'essais de suivre un peu mais j'avoue je suis un peu larguée parce que la je m'occupe d'un autre programme (pour mon taf)donc ca me perturbe un peu,
Ne croyez pas que je ne m'interesse pas a ce que vous dites, c'est juste qu'il faudra que je reprenne cela à tete reposée :)

signaler à un administrateur
Commentaire de magic_Nono le 31/08/2004 15:18:58

djl

d'ou le flush

signaler à un administrateur
Commentaire de djl le 31/08/2004 15:20:01

flush( stdin ) ca foire, c'est pas standard, c'est dangereux, c'est illogique...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.