Programmation en C

Fermé
Cmoi - 4 sept. 2008 à 13:50
 Cmoi - 4 sept. 2008 à 15:54
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

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
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
bouge pa jariv jfé un truc et j sui a toi
0
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
ah OK,

je vais essayer avec un fwrite.

merci !
0