gilou Modérateur Modzilla | Bon déja en modifiant data.c avec:
Code :
- void printItem(ITEM *item) {
- printf(" - [%d] %s (%s): %.2lf \n", item->id, item->name, item->category, item->price);
- }
- void printStockItem(STOCKITEM *stockItem) {
- printf(" - [%d] %d unite expirant le %s \n",stockItem->item->id, stockItem->quantity, stockItem->expirationDate);
- }
|
et stock.c avec:
Code :
- void printStock(STOCK *stock) {
- int i;
- if (stock->nbItems) {
- printf("%d items\n", stock->nbItems);
- for(i = 0; i < stock->nbItems; ++i) {
- printItem(&stock->items[i]);
- }
- if(stock->size == 0) {
- printf("\n [] \n" );
- }
- else {
- struct STOCKNODE *current = stock->first;
- printf("%d stockitems\n", stock->size);
- for(i = 0; i < stock->size; ++i) { // voir dans data.c
- printStockItem(current->item); // voir dans data.c
- current=current->next;
- }
- }
- }
- else {
- printf("Stock vide\n" );
- }
- }
- STOCK *loadStock(char *path) {
- STOCK *liste = newStock(); //initialisation de la liste
- FILE *file;
- char buff[30]; // ouverture du fichier afin de prendre les éléments pour construire les structures
- int i, id = 0, quantity;
- double price[30];
- char *category[20];
- char *name[30];
- char *expiDate[20];
- char *c;
- if (liste == NULL) {
- return NULL;
- }
- file = fopen(path,"r" );
- if(file == NULL) {
- printf("\n impossible d'ouvrir le fichier %s \n\n",path);
- return NULL;
- }
- fgets(buff,30,file); // lis la première ligne du fichier stock.txt qui correspond au nombre 3 et qui est le nombre d'article
- int nbItems = atoi(buff);
- liste->nbItems = nbItems;
- liste->items = malloc(nbItems * sizeof(ITEM)); // déclaration du tableau de structures ITEM
- for (i = 0; i < nbItems; ++i) {
- category[i] = malloc(sizeof(buff));
- fgets(buff, 30, file); // lis la ligne suivante et la place dans la variable char category
- if ((c = strrchr(buff, '\n')) != NULL) {
- *c = '\0'; // purge du '\n' terminant chaque ligne d'un fichier texte
- }
- strcpy(category[i], buff);
- name[i] = malloc(sizeof(buff));
- fgets(buff, 30, file);
- if ((c = strrchr(buff, '\n')) != NULL) {
- *c = '\0'; // purge du '\n' terminant chaque ligne d'un fichier texte
- }
- *name[i] = '\0';
- strcpy(name[i], buff);
- fgets(buff, 30, file);
- price[i] = atof(buff);
- liste->items[i] = *buildItem(id, name[i], category[i], price[i]); // place dans la case i du tableau de structures, la structure construite voir data.c
- id++;
- }
- fgets(buff,30,file); // ligne vide
- for (i = 0; i < nbItems; ++i) {
- fgets(buff, 30, file);
- id = atoi(buff);
- fgets(buff, 30, file);
- quantity = atoi(buff);
- expiDate[i] = malloc(sizeof(buff));
- fgets(buff, 30, file);
- if ((c = strrchr(buff, '\n')) != NULL) {
- *c='\0'; // purge du '\n' terminant chaque ligne d'un fichier texte
- }
- strcpy(expiDate[i], buff);
- STOCKITEM *receive_stock = malloc(sizeof(STOCKITEM));
- receive_stock = buildStockItem(&liste->items[i], quantity, expiDate[i]); //créaction d'une structure STOCKITEM au fur et a mesure qu'on parcourt la liste
- // liste->items[id] = *receive_stock->item;
- addToStock(liste, receive_stock); // on ajoute ce qu'on a construit
- }
-
- fclose(file);
- return liste;
- }
|
et en virant tous les blancs inutiles de stock.txt
3
DVD
Les Simpson - Saison 14
12.99
Livre
Langage C
7.99
Charcuterie
Jambon Cuit - 4 tranches
3.99
0
10
-
2
10
25/12/2011
1
1
-
2
5
27/12/2011 |
On obtient un truc qui marche presque:
3 items
- [0] Les Simpson - Saison 14 (DVD): 12.99
- [1] Langage C (Livre): 7.99
- [2] Jambon Cuit - 4 tranches (Charcuterie): 3.99
3 stockitems
- [0] 10 unite expirant le -
- [1] 10 unite expirant le 25/12/2011
- [2] 1 unite expirant le - |
Mais la ou on tombe sur ton erreur de conception, c'est ici:
Citation :
fgets(buff,30,file); // ligne vide
for (i = 0; i < nbItems; ++i) {
fgets(buff, 30, file);
id = atoi(buff);
fgets(buff, 30, file);
quantity = atoi(buff);
|
Il y a aucune raison que le nb de stockitems soit égal au nb d'items, dans ton fichier d'ailleurs, 3 items et 4 stockitems, et ton code fait qu'on n'en lit que 3.
Commences par penser à un format plus utilisable (s'il ne t'es pas imposé) comme fichier de sauvegarde des stocks pour t'en sortir
- soit en notant le nb de stockitems
- soit en ayant une marque de suite d'items et une de suite de stockitems en tête de ce type d'enregistrement (avec une fin par exemple quand on rencontre une nouvelle marque)
ou autre (lecture de tous les stockitems jusqu'a la fin du fichier, etc), en faisant gaffe de choisir une solution qui puisse évoluer si ton projet le fait (si tu dois pouvoir ajouter des items et des stockitems à l'avenir par exemple)
A+, ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|