Structure c, fichier
wicky-james
-
Wicky-james Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Wicky-james Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Bonjour je voudrais ajouter certaine contrainte dans ma structure je n'arrive pas malgré les videos que pu regarder sur youtube(langage_c structure et acces au fichier; les fichiers en langage c(fopen,fclose)), je n'arrive pas realiser le travaille.
contrainte;
que le nom entrer ne soit pas déjà enregistrer qu'il redemande d'entrer un nouveau nom;
qu'on fasse une recherche et afficher les information:
je ne veux que ça pour l'instant les reste je voudrais m’améliorer.
#include <stdio.h>
#include <stdlib.h>
#define MAX 30
#include <string.h>
#include <windows.h>
int i, nb;
// declaration de la structure
typedef struct Vente{
char description_article[MAX];
float prix_unitaire;
float montant;
int quantite;
char nom_client[MAX];
};
struct Vente vt[MAX];
// methode d'enregidtrement
void EnregistrerVente(){
system("cls"); // pour netoyer le fichier
char nom_client;
// creation du ficier virtuel
FILE * fiche;
fiche = fopen(fichier, "a");
printf("\t veuillez entrer les prescriptions demander \n\n");
printf("-------------------------------------------------------------------------- \n\n");
printf("\n entrer le nom du client:");
scanf("%s",&vt[i].nom_client);
fflush(stdin);
if(fiche == 1){
perror("Fichier n'existe pas");
exit(0);
}
while(nom_client== "vt.[i]nom_client")
{
printf("\n ce nom existe deja");
printf("\n veuiller entrer un nouveau nom:");
scanf("%s",&nom_client);
}
printf("\t--------------------------------------------------- \n\n");
printf("Entrer la description de l'article : \n");
scanf("%s", &vt[i].description_article[i]);
fflush(stdin);
printf("Entrer le montant du produits : \n");
scanf("%f", &vt[i].montant);
fflush(stdin);
printf("Entrer le prix unitaire : \n");
scanf("%f", &vt[i].prix_unitaire);
fflush(stdin);
printf("Entrer la quantite : \n");
scanf("%d", &vt[i].quantite);
fflush(stdin);
//printf("le resulta est%2.f",*montant_total.);
// Lecture du fichier
//fwrite(&vt,sizeof (vt), 1, fiche);
fprintf(fiche, "\n %s \n",vt[i].description_article);
fprintf(fiche, " %2.f \n",vt[i].prix_unitaire);
fprintf(fiche, " %d \n",vt[i].quantite);
fprintf(fiche, " %s \n",vt[i].nom_client);
//fprintf(fiche, "%2.f\n",vt[i].montant_total);
// fermeture du fichier
fclose(fiche);
return 0;
}
contrainte;
que le nom entrer ne soit pas déjà enregistrer qu'il redemande d'entrer un nouveau nom;
qu'on fasse une recherche et afficher les information:
je ne veux que ça pour l'instant les reste je voudrais m’améliorer.
#include <stdio.h>
#include <stdlib.h>
#define MAX 30
#include <string.h>
#include <windows.h>
int i, nb;
// declaration de la structure
typedef struct Vente{
char description_article[MAX];
float prix_unitaire;
float montant;
int quantite;
char nom_client[MAX];
};
struct Vente vt[MAX];
// methode d'enregidtrement
void EnregistrerVente(){
system("cls"); // pour netoyer le fichier
char nom_client;
// creation du ficier virtuel
FILE * fiche;
fiche = fopen(fichier, "a");
printf("\t veuillez entrer les prescriptions demander \n\n");
printf("-------------------------------------------------------------------------- \n\n");
printf("\n entrer le nom du client:");
scanf("%s",&vt[i].nom_client);
fflush(stdin);
if(fiche == 1){
perror("Fichier n'existe pas");
exit(0);
}
while(nom_client== "vt.[i]nom_client")
{
printf("\n ce nom existe deja");
printf("\n veuiller entrer un nouveau nom:");
scanf("%s",&nom_client);
}
printf("\t--------------------------------------------------- \n\n");
printf("Entrer la description de l'article : \n");
scanf("%s", &vt[i].description_article[i]);
fflush(stdin);
printf("Entrer le montant du produits : \n");
scanf("%f", &vt[i].montant);
fflush(stdin);
printf("Entrer le prix unitaire : \n");
scanf("%f", &vt[i].prix_unitaire);
fflush(stdin);
printf("Entrer la quantite : \n");
scanf("%d", &vt[i].quantite);
fflush(stdin);
//printf("le resulta est%2.f",*montant_total.);
// Lecture du fichier
//fwrite(&vt,sizeof (vt), 1, fiche);
fprintf(fiche, "\n %s \n",vt[i].description_article);
fprintf(fiche, " %2.f \n",vt[i].prix_unitaire);
fprintf(fiche, " %d \n",vt[i].quantite);
fprintf(fiche, " %s \n",vt[i].nom_client);
//fprintf(fiche, "%2.f\n",vt[i].montant_total);
// fermeture du fichier
fclose(fiche);
return 0;
}
A voir également:
- Structure c, fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
Bonjour,
Pour vérifier si un fichier existe, il n'y a pas de fonction dans la norme à ma connaissance. Il faut utiliser des librairies spécifiques, sinon on peut écrire une fonction simple qui ouvrira le fichier si n'existe pas et ouverture écriture possible, sinon retournera une erreur non nulle.
Pour vérifier si un fichier existe, il n'y a pas de fonction dans la norme à ma connaissance. Il faut utiliser des librairies spécifiques, sinon on peut écrire une fonction simple qui ouvrira le fichier si n'existe pas et ouverture écriture possible, sinon retournera une erreur non nulle.
#include <stdio.h> #include <errno.h> int tryOpen( const char name[] , FILE **pf ) { int ret = 0; FILE* file = fopen(name, "r+"); // ouverture en mode modification if ( file != NULL ) { // le fichier a pu être ouvert pour modification fclose( file ); file = NULL; ret = EEXIST; // erreur il existe déjà } else { file = fopen(name, "wt"); // ouverture en mode écriture texte if ( file == NULL ) { // impossible : la cause est écrite dans errno // EINVAL: nom de fichier non valide // EACCES: fichier en lecture seule ou protégé // ENOENT: nom réservé, ou répertoire n'existe pas // EBADF : impossible d'écrire ret = errno; } // sinon on a ouvert le fichier } if ( pf != NULL ) *pf = file; // transmettre le fichier ouvert else if ( file != NULL ) fclose( file ); return ret; }
je voulu au premier lieu ne pas laisser entre un nom existant. ca n'a pas marche.