[C] Esercizio trova prodotto

fabiett1
Ciao a tutti! Il testo dell'esercizio è:

Si scriva un programma che acquisisca 3 stringhe, ciascuna contenente il nome di un prodotto e il relativo prezzo separati da spazio. Una volta memorizzate queste informazioni in opportune variabili, il programma riceve un’ulteriore stringa contente un nome di prodotto e un valore intero corrispondente a una quantità.
Il programma deve:
a. Stabilire se il prodotto inserito per ultimo corrisponde ad uno dei prodotti memorizzati in precedenza;
b. In caso negativo, richiedere un altro inserimento di nome prodotto e quantità;
c. In caso positivo, calcolare e visualizzare il costo totale moltiplicando quantità e prezzo del prodotto in questione.

Il mio problema è che non riesco a determinare il costo totale. L'errore credo che sia all'interno della funzione "trovaProdotto". Potete aiutarmi?
Di seguito il testo del mio codice:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
#include <string.h>

int trovaProdotto(char* a, char* b, char* c, char* cerca, int dim);

int trovaProdotto(char* a, char* b, char* c, char* cerca, int dim)
{
    int flag=NULL;

    if(strcmp(a,cerca)==0)
        flag=1;
    if(strcmp(b,cerca)==0)
        flag=2;
    if(strcmp(c,cerca)==0)
        flag=3;

    return flag;
}


int main()
{
    char s1[SIZE],s2[SIZE],s3[SIZE];
    char a[SIZE],b[SIZE],c[SIZE];
    int prezzo1, prezzo2, prezzo3;
    char s4[SIZE], cerca[SIZE];
    int qta, costoTotale=0, i, prodottoTrovato=0;

    //INSERIMENTO PRIMO PRODOTTO E PREZZO
    printf("Inserire prodotto e prezzo:\n");
    gets(s1);
    sscanf(s1,"%s %d",a,&prezzo1);

    //INSERIMENTO SECONDO PRODOTTO E PREZZO
    printf("Inserire prodotto e prezzo:\n");
    gets(s2);
    sscanf(s2,"%s %d",b,&prezzo2);

    //INSERIMENTO TERZO PRODOTTO E PREZZO
    printf("Inserire prodotto e prezzo:\n");
    gets(s3);
    sscanf(s3,"%s %d",c,&prezzo3);

    //INSERIMENTO ARTICOLO DA RICERCARE
    printf("Inserire l'articolo desiderato e la quantita':\n");
    gets(s4);
    sscanf(s4,"%s %d",cerca,&qta);

    //CONTROLLO PRESENZA PRODOTTO RICERCATO
    prodottoTrovato=trovaProdotto(s1,s2,s3,cerca,strlen(cerca));
    while(prodottoTrovato==0)
    {
        for(i=0; i<SIZE; i++)
        {
            cerca[i]=' ';
        }
        qta=0;
        printf("Inserire nuovamente l'articolo desiderato e la quantita':\n");
        gets(cerca);
        sscanf(s4,"%s %d",cerca,&qta);
        prodottoTrovato=trovaProdotto(s1,s2,s3,cerca,strlen(cerca));
    }

    switch(prodottoTrovato)
    {
        case 1:
             costoTotale=qta*prezzo1;
             break;
        case 2:
            costoTotale=qta*prezzo2;
            break;
        case 3:
            costoTotale=qta*prezzo3;
            break;
    }

    printf("Il costo d'acquisto e' %d", costoTotale);

    return 0;
}

Risposte
apatriarca
Il motivo per cui non funziona il tuo codice è che stai passando s1, s2 e s3 al posto di a, b e c alla funzione trovaProdotto.

Esistono diversi difetti nel programma (alcuni dei quali sono "colpa" del tuo insegnante).
1. Dimenticati dell'esistenza di una funzione gets. Ha un sacco di problemi di sicurezza ed è stata per questa ragione eliminata dallo standard nell'ultima versione del 2011. Fu in precedenza deprecata nel 1999 e il suo uso è sconsigliato da sempre. Esistono alternative migliori e non ha quindi alcun senso fare ancora uso di questa funzione.
2. La variabile flag in trovaProdotto è un intero, non ha quindi senso inizializzarlo con NULL (che è invece di tipo void *).
3. Il parametro dim della funzione trovaProdotto non viene usato.
4. C'è una ragione per cui il prezzo sia un intero invece di un numero reale?
5. Utilizzi gets/sscanf invece di scanf per assicurarti di leggere una riga per volta?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.