Problema con le stringhe

di il
7 risposte

Problema con le stringhe

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;
}

7 Risposte

  • Re: Problema con le stringhe

    Perché

    &prodotto1[N]

    ?

    Semmai solamente

    prodotto1

    e occhio al terminatore
  • Re: Problema con le stringhe

    Usa strtok.

    Ma poi le hai studiate bene le funzioni? lung1=strlen(prodotto1); presuppone che sia vero a monte che prodotto1[lung1]='\0';
  • Re: Problema con le stringhe

    oregon ha scritto:


    Perché

    &prodotto1[N]

    ?

    Semmai solamente

    prodotto1

    e occhio al terminatore
    Avevo provato senza & ma non funzionava lo stesso.
    Per quanto riguarda il terminatore non fa niente lì, mi sono dimenticato di cancellarlo
  • Re: Problema con le stringhe

    Senza & come? Non funziona in che senso? Hai fatto u po' di debug?
  • Re: Problema con le stringhe

    Crossposting

    "forum.html.it/forum/showthread.php?threadid=2971901&postid=25547430#post25547430"
  • Re: Problema con le stringhe

    ******
  • Re: Problema con le stringhe

    Chiudo per cross posting.
Devi accedere o registrarti per scrivere nel forum
7 risposte