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:

  1. Stabilire se il prodotto inserito per ultimo corrisponde ad uno dei prodotti memorizzati in precedenza
  2. In caso negativo, richiedere un altro inserimento di nome prodotto e quantità
  3. In caso positivo, calcolare e visualizzare il costo totale moltiplicando quantità e prezzo del prodotto in questione


Il problema sta nella righe evidenziate in verde. 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è.


codice:
#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;
}