Crash programma in Linguaggio C

di il
4 risposte

Crash programma in Linguaggio C

Buongiorno a tutti,

Come da titolo vi chiedo un aiuto su un programma che devo sviluppare in linguaggio C. Il programma consiste nel leggere un file contenente N righe (numero righe ignote) dove ogni riga è formata da un codice prodotto, la quantità e il prezzo unitario, e il programma deve calcolare:
1) il valore totale dell'ipotetico magazzino
2)Inserito un codice da tastiera simulare i tre casi dove:
- Il prodotto ce in magazzino
-Il prodotto ce ma è finito
-Il prodotto non è presente

Non so più veramente come fare, non riesco a farlo girare. Una volta che inserisco la quantità di pezzi da acquistare il programma smette di funzionare.

P.S. codice_u= codice utente (cioè inserito dalla persona), pezzi_u=pezzi che l'utente vuole acquistare,prezzo_uni=prezzo del singolo pezzo

A voi la parola e grazie in anticipo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i,totale,pezzi_u,n_pezzi,flag,prezzo_uni;
    char codice [20];
    char codice_u[20];
    FILE*fp;

    fopen("inventario.txt","r");
    if(fp==NULL)
    {
         printf("ERRORE FILE.");

         return -1;
    }

    printf("Inserisci il codice prodotto: ");
    scanf("%s",codice_u);
    printf("\n");
    printf("Quanti pezzi vuoi acquistare? ");
    scanf("%d",&pezzi_u);

    i=0;
    totale=0;
    while(fscanf(fp,"%s %d %d",codice,&n_pezzi,&prezzo_uni)!=EOF)
    {
         if(strcmp(codice_u,codice)==0 && pezzi_u<=n_pezzi)
         {
              flag=1;
         }
         if(strcmp(codice_u,codice)==0 && pezzi_u>n_pezzi)
         {
              flag=2;
         }
         if(strcmp(codice_u,codice)!=0)
         {
              flag=3;
         }

         totale=totale+(n_pezzi*prezzo_uni);

         i++;
    }

    printf("\n");

    printf("Il valore totale del magazzino e' di %d Euro.",totale);

    printf("\n");

    if(flag==1)
    {
         printf("Il pezzo e' presente in magazzino. Rimangono disponibili %d pezzi.",n_pezzi-pezzi_u);
    }
    if(flag==2)
    {
         printf("Il pezzo e' presente in magazzino, ma non ci sono i pezzi sufficienti per la vendita.");
    }
    if(flag==3)
    {
         printf("Il pezzo non e' presente in magazzino.");
    }

    fclose(fp);

    return 0;
}

4 Risposte

  • Re: Crash programma in Linguaggio C

    Qui

    fopen("inventario.txt", "r");

    manca la variabile

    fp=fopen("inventario.txt", "r");
  • Re: Crash programma in Linguaggio C

    Ciao grazie,

    Hai ragione cavolo non avevo messo fp, solo ora è sorto un altro problema...qualsiasi codice inserisco (ipotetico codice del pezzo, preso da file) mi dice che non è presente in magazzino...

    La comparazione delle stringhe è corretta?
  • Re: Crash programma in Linguaggio C

    Non ho il file dei dati quindi non ti posso dire molto.

    Controlla il contenuto delle variabili con il debugger eseguendo passo passo.
  • Re: Crash programma in Linguaggio C

    Il contenuto del file è questo:

    FFGHI1469 200 50
    CKGGT0023 150 10
    S5H888CKL 200 20
    KKOLM0010 100 15
    AA15A01B1 50 3

    Comunque ho capito cosa fa, il programma apre il ciclo e lo esegue, ma ad esempio se io inserisco i primi 4 codici mi dice che non c'è in magazzino, se metto l'ultimo mi dice che ce è gira bene, questo perché lui quando fa il confronto non esce dal ciclo. Quindi per esempio se io inserisco il primo codice lui fa questo lavoro:

    Confronta il primo con quello da me inserito, sarebbe corretto ma non esce dal ciclo e va avanti a ciclare, quindi arriva alla solita conclusione in cui il programma si trova un codice da me scritto (dall'1 al quattro) che non corrisponde all'ultimo, da cui flag=3 e mi stampa che non è presente in magazzino.

    Ora io questo problema l'ho risolto inserendo due break nelle prime due condizioni.

    Però come faccio a fargli calcolare il valore complessivo dei prodotti, PRIMA della ipotetica vendita, quindi con tutti i prodotti? (quindi con i dati scritti in tabella sopra.

    NOn so cosa sia il debugger perdonami, devo dare l'esame tra un mese e non lo abbiamo fatto all'università

    Grazie comunque in anticipo
Devi accedere o registrarti per scrivere nel forum
4 risposte