Ciao a tutti,
ho un problema con un esercizio di programmazione in C.
TESTO
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:
Stabilire se il prodotto inserito per ultimo corrisponde ad uno dei prodotti memorizzati in precedenza
In caso negativo, richiedere un altro inserimento di nome prodotto e quantità
In caso positivo, calcolare e visualizzare il costo totale moltiplicando quantità e prezzo del prodotto in questione
Il problema sta nella righe che iniziano con '______'(ovviamente solo per farle vedere meglio). Il programma al posto di copiare la stringa prodotto1 in w1 copia un carattere strano (una sorta di 'beta' con un cerchio a sinistra) e copia prodotto1 in w2 e così via.
Non capisco perchè.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 100
#define TRUE 1
#define FALSE 0
int main()
{
char prodotto1[N], prodotto2[N], prodotto3[N], prodottofinale[N], p1[N], p2[N], p3[N], w1[N], w2[N], w3[N], wf[N], qt[N];
int i, contatore1=1, contatore2=1, contatore3=1, contatoref=0, lung1, lung2, lung3, lungf, q, ciclo=TRUE;
float price1, price2, price3, pricef;
printf("Inserire 3 prodotti con i relativi prezzi(fino ai centesimi):\n");
gets(prodotto1);
gets(prodotto2);
gets(prodotto3);
printf("\n\nEcco i prodotti inseriti:\n- %s;\n- %s;\n- %s.\n", prodotto1, prodotto2, prodotto3);
lung1=strlen(prodotto1);
lung2=strlen(prodotto2);
lung3=strlen(prodotto3);
prodotto1[lung1]='\0'; prodotto2[lung2]='\0'; prodotto3[lung3]='\0';
for(i=lung1-1; i>=0; i--) /*scomposizione price1 e prodotto1*/
{
if (isdigit(prodotto1[i]))
contatore1++;
}
for(i=lung2-1; i>=0; i--) /*scomposizione price2 e prodotto2*/
{
if (isdigit(prodotto2[i]))
contatore2++;
}
for(i=lung3-1; i>=0; i--) /*scomposizione price3 e prodotto3*/
{
if (isdigit(prodotto3[i]))
contatore3++;
}
strncpy(p1, &prodotto1[lung1-contatore1], contatore1);
price1=atof(p1);
strncpy(p2, &prodotto2[lung2-contatore2], contatore2);
price2=atof(p2);
strncpy(p3, &prodotto3[lung3-contatore3], contatore3);
price3=atof(p3);
p1[contatore1]='\0'; p2[contatore2]='\0'; p3[lung3]='\0';
_____ strncpy(w1, &prodotto1[N],(lung1-contatore1));
_____ strncpy(w2, &prodotto2[N],(lung2-contatore2));
_____ strncpy(w3, &prodotto3[N],(lung3-contatore3));
while (ciclo)
{
printf("Inserire uno dei prodotti elencati con relativa quantita' da acquistare: ");
gets(prodottofinale);
lungf=strlen(prodottofinale);
prodottofinale[lungf+1]='\0';
for(i=lungf-1; i>=0; i--) /*scomposizione price1 e prodotto1*/
{
if (isdigit(prodottofinale[i]))
contatoref++;
}
strncpy(qt, &prodottofinale[lungf-contatoref], contatoref);
q=atoi(qt);
strncpy(wf, &prodottofinale[N],(lungf-contatoref));
if (strcmp(wf, w1)==TRUE)
{
pricef=q*price1;
printf("Hai acquistato %d volte il prodotto '%s'.\nLa spesa totale e' %.2f", q, w1, pricef);
ciclo=FALSE;
}
else
{
if (strcmp(wf, w2)==TRUE)
{
pricef=q*price2;
printf("Hai acquistato %d volte il prodotto '%s'.\nLa spesa totale e' %.2f", q, w2, pricef);
ciclo=FALSE;
}
else
{
if (strcmp(wf, w3)==TRUE)
{
pricef=q*price3;
printf("Hai acquistato %d volte il prodotto '%s'.\nLa spesa totale e' %.2f", q, w3, pricef);
ciclo=FALSE;
}
else printf("ERRORE!! Il prodotto inserito non e' presente nella lista. Riprovare.");
}
}
}
return 0;
}