Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Problema programma in C

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

  2. #2
    Ho risolto il problema. Ora però funziona tutto tranne il controllo finale. Nel codice è sbagliato, in realtà sono tutti ==0. Anche se le stringhe sono uguali le considera come fossero diverse

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,139
    La funzione strcmp() ritorna 0 (che, per definizione, è FALSO) se le due stringhe sono UGUALI. Un valore diverso da 0 (che, per definizione è VERO) se le due stringhe sono DIVERSE (minore di 0 se la prima è lessicograficamente minore della seconda, viceversa un valore maggiore di 0).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,311
    Quote Originariamente inviata da Birbone96 Visualizza il messaggio
    Ho risolto il problema. Ora però funziona tutto tranne il controllo finale.
    Qual era il problema? Adesso qual è il codice corretto?

    Nel codice è sbagliato, in realtà sono tutti ==0. Anche se le stringhe sono uguali le considera come fossero diverse
    Di quali righe di codice parli?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.