Programmation en C

Cmoi -  
 Cmoi -
Bonjour,
je voudrais de m'entrainer a programmer en C un catalogue: je rentre les noms des produits et leur prix, et je peux lister tous les articles referencés.
j'ai essayé de programmer ça, j'arrive à rentrer les produits dans le catalogue, à lister tous els articles, mais j'ai voulu faire une fonction pour modifier le prix d'un article et cai ne marche pas : à la compilation il n'y a pas d'erreur, mais quand j'exécute le programme,le prix n'est pas modifier.
Est ce que vous pourriez me dire où est mon erreur ???

merci d'avance


#include <stdio.h>
#include <string.h>

typedef struct
{
char nom[8];
int prix;
}article;


void ajout(FILE *rep);
void liste(FILE *rep);
void modifier(FILE *rep, article art);
void menu(FILE *rep);



main ()
{
FILE *catalog;

catalog=fopen("catalogue","a+");
menu(catalog);
fclose(catalog);
}



void ajout(FILE *catalog)
{
article art;

printf("entrer le nom du produit :\n");
scanf("%s",art.nom);

printf("entrer le prix :\n");
scanf("%d",&art.prix);

fwrite(&art,sizeof(art),1,catalog);
}



void liste(FILE *catalog)
{
article art;

fseek(catalog,0,SEEK_SET);
while ( fread(&art,sizeof(art),1,catalog) != 0)
{
printf("nom : %s\n",art.nom);
printf("num : %d\n\n",art.prix);

}

}



void modifier(FILE *catalog, article art)
{
int fini=1;
char name[8];
int nouvprix;

printf("\ndonner un NOM\n");
scanf("%s",name);

fseek(catalog,0,SEEK_SET);
while ( fread(&art,sizeof(art),1,catalog) != 0 && fini !=0)
{
if (strcmp(art.nom,name) ==0)
{
printf("taper le nouveau prix\n");
scanf("%d",&nouvprix);
art.prix=nouvprix;
fini=0;
}
}

if (fini == 1)
printf("le nom n'est pas dans le catalogue\n");

}



void menu(FILE *catalog)
{
char reponse;
article art;

do
{
printf("\n\najouter...........a\n");
printf("lister...........l\n");
printf("modifier...........m\n");
printf("quitter...........q\n\n");

printf("quel est votre choix ?????\n");
scanf(" %c",&reponse);
switch (reponse)
{
case 'a':ajout(catalog);
break;
case 'l':liste(catalog);
break;
case 'm':modifier(catalog, art);
break;
}
}
while ( reponse != 'q');
}

4 réponses

socrate.
 
slt ta variable nouveau prix est locale si je ne m trompe? essai déja d'en faire une déclaration globale et si ça ne march pas fait moi sign
0
Cmoi
 
vous voulez dire passer nouvprix avec un pointeur ?
je fais:

void modifier(FILE *catalog, article art)
{
int fini=1;
char name[8];
int *nouvprix; //////////////////////////////// j'ai rajouté *

printf("\ndonner un NOM\n");
scanf("%s",name);

fseek(catalog,0,SEEK_SET);
while ( fread(&art,sizeof(art),1,catalog) != 0 && fini !=0)
{
if (strcmp(art.nom,name) ==0)
{
printf("taper le nouveau prix\n");
scanf("%d",&nouvprix);
art.prix=&nouvprix; //////////////////////////////// j'ai rajouté &
fini=0;
}
}

if (fini == 1)
printf("le nom n'est pas dans le catalogue\n");

}



mais j'ai un warning, et ca ne change rien ... mais je crois que je n'ai pas bien compris ce que vous vouliez dire par variable globale (ou alors utiliser #define ??)
0
socrate.
 
bouge pa jariv jfé un truc et j sui a toi
0
idakhamid
 
En fait tu change le prix mais su la console c’est tout, il faut aussi réécrire la structure dans ton fichier donc il faut rajouter fwrite dans ta fonction modifier
0
Cmoi
 
ah OK,

je vais essayer avec un fwrite.

merci !
0