Programma C con stringhe e vettori

di Anonimizzato20317 il
2 risposte
Ciao a tutti, sto svlogendo un esercizio la cui consegna è:
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
e ho scritto questo codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 512
#define Q 3

int main()
{
    int i,find=0,qtt;
    float price[Q],value;
    char prodname[Q][N],prod[N];

    for(i=0;i<Q;i++)
    {
        printf("Inserire il nome del %d%c prodotto e il relativo prezzo: ",i+1,248);
        scanf("%s %f",prodname[i],&price[i]);
    }

    printf("\n");

    while(find==0)
    {
        printf("Inserire il nome del prodotto e la sua quantit%c: ",133);
        scanf("%s %d",prod,&qtt);

        for(i=0;i<Q && find==0;i++)
        {
            if(!strcmp(prodname[i],prod))
            {
                find=1;
            }
        }
    }

    value=price[i]*(float)qtt;

    printf("\nIl costo totale di %d %s %c %g euro.\n\n",qtt,prod,138,value);

    return 0;
}
Dopo aver inserito i primi tre elementi, il programma funziona correttamente se inserisco il nome di uno dei primi due, mentre se inserisco il nome del terzo prodotto non mi calcola il costo totale. Più precisamente il valore di value diventa 0, e non capisco perchè . Sapete aiutarmi? Grazie mille in anticipo!

2 Risposte

  • Il problema è che la for della ricerca esegue comunque la i++ prima di terminare. Quindi dovrai scrivere

    value=price[i-1]*(float)qtt;
  • oregon ha scritto:


    Il problema è che la for della ricerca esegue comunque la i++ prima di terminare. Quindi dovrai scrivere

    value=price[i-1]*(float)qtt;
    Ma porc... Grazie mille oregon, mi era completamente sfuggito!
Devi accedere o registrarti per scrivere nel forum
2 risposte