Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    3

    [C] programma per magazzino

    Ciao ragazzi sono nuovo prima discussione, qualcuno può aiutarmi.. Ho un problema nel case due non riesco ad aggiornare le voci presenti nel file di testo. Grazie in anticipo

    Ecco il codice

    codice:
    #include <stdio.h>
    #include <string.h>
    #include<stdlib.h>
    
    typedef struct Articolo {
        int codice;
        char nome[300];
        int quantita;
    } ARTICOLO;
    int g=0;
    int j=0;
    int i=0;
    int var=0;
    int qprovv=0;
    int ID = 0, quantit =0;
    char NomeArticolo [50];
    
    int main (void)
    {
        ARTICOLO Articolo[100];
        FILE *fd;
        char c;
        char NomeArticolo[50];
        int q, ID;
        float p, prezzo1, prezzo2;
    
        do
        {
            printf("1-Inserisci Articolo\n");
            printf("2-Modifica Quantita'\n");
            printf("3- Visualizza magazzino\n");
            printf("4- Visualizza riga per riga\n");
            printf("0-Fine\n");
            g=0;
            c=getchar();
            getchar();
    
    
            switch (c)
            {
            case '1':
                printf("Inserisci codice Articolo: ");
                scanf("%d", &ID);
                i=0;
                /* apre il file */
                if ((fd = fopen("magazzino.txt", "r+")) != NULL)
    
    
                {   while(EOF!=fscanf(fd, "%d %s %d\n", &Articolo[i].codice, &Articolo[i].nome, &Articolo[i].quantita))
                        i++;
                }
    
    
                else (printf("ERRORE NELL'APERTURA DEL FILE"));
    
    
                /* verifica se l'oggetto è presente  */
    
    
                for (j=0; j<i; j++)
                {
                    if(ID == Articolo[j].codice)
    
    
                    {
                        printf( "Prodotto gia' presente.\n\n");
                        g = 1;
                    }
                }
                /* inserisce un nuovo oggetto */
                if(g== 0)
                {
                    printf("\nInserisci nome Articolo: ");
                    scanf("%s", &NomeArticolo);
                    printf("\nInserisci quantita: ");
                    scanf("%d", &quantit);
                    fprintf(fd, "\n%d %s  %d ",ID, NomeArticolo, quantit );
                    printf("Il prodotto e' stato inserito nel database.\n");
                }
                fclose(fd);
                g=0;
                j=0;
                break;
            case '2':
                i=0;
                printf("Inserisci codice Articolo: ");
                scanf("%d", &ID);
                /* apre il file */
                if ((fd = fopen("magazzino.txt", "r+")) != NULL)
                {
                    while(EOF!=fscanf(fd, "%d %s %d\n", &Articolo[i].codice, &Articolo[i].nome, &Articolo[i].quantita))
                        /* verifica se l'oggetto è presente  */
                    {
                        if(ID == Articolo[i].codice)
                        {
                            printf("%d",i);
                            printf( "Prodotto presente inserisci la quantita da variare preceduta da +o-:.\n");
                            scanf("%d", &var);
                            qprovv = Articolo[i].quantita + var;
                            printf("%d", Articolo[i].quantita);
                            fprintf(fd, "%d  %s  %d", Articolo[i].codice, Articolo[i].nome, qprovv);
                            printf( "La quantita' presente in magazzino dell'oggetto %d e' stata variata.\n\n", ID);
                            g = 1;
                            break;
                        }
                        i++;
                    }
                    if(g== 0)
                    {
                        printf("Oggetto non presente.\n\n");
                        break;
                    }
                }
                else (printf("ERRORE NELL'APERTURA DEL FILE"));
    
                fclose(fd);
                g=0;
                j=0;
                break;
            case '3':
                /* apre il file */
                i=0;
                if ((fd = fopen("magazzino.txt", "r+")) != NULL)
                {
                    while(EOF!=fscanf(fd, "%d %s %d\n", &Articolo[i].codice, &Articolo[i].nome, &Articolo[i].quantita))
                        i++;
                }
                else (printf("ERRORE NELL'APERTURA DEL FILE\n"));
    
                /* visualizza l'intero magazzino */
                for (j=0; j< i; j++)
                {
                    printf("%d %s %d\n", Articolo[j].codice, Articolo[j].nome, Articolo[j].quantita);
                    exit;
                }
    
                fclose(fd);
    
                j=0;
                i=0;
    
                break;
            case '0':
                return 0;
            }
            while(!getchar());
        }
        while(c);
    }
    Ultima modifica di MItaly; 12-12-2015 a 00:25 Motivo: Formattazione, tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa i tag CODE per il codice e fornisci maggiori dettagli sul problema, descrivendo cosa succede e in quale parte di codice ... Messaggi di errore, dati in output sbagliati ... insomma, così non si può dare una mano.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho aggiunto i tag CODE e riformattato il codice (era abbastanza illeggibile), la prossima volta posta il codice in forma guardabile fin da subito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    3
    scusate ragazzi questa è la prima discussione, ringrazio in anticipo tutti. Cmq il codice non da nessun errore. il problema è che nel case 2 "modifica quantità" non fa quello che dovrebbe, cioè non scrive sul file la quantità aggiornata..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, ma il contenuto del file prima e dopo la modifica hai visto qual è?

    Ce lo mostri?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    3
    ciaoo, ecco il file prima e dopo.

    1000 dado 300
    1001 vite 500
    1002 molla 80
    1003 volano 10
    1004 filo 100
    1005 iniettore 30
    1006 basetta 39
    1007 vite_lunga 500
    1008 or_basetta 200
    1009 or_cilindro 100

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No, non funziona così.

    Per riscrivere la riga, dopo averla letta (e quindi superata), devi tornare indietro con il puntatore dello stesso numero di caratteri letti. Lo puoi fare con una

    fseek(fd, -x, SEEK_CUR);

    prima della fprintf, in cui x è la lunghezza di caratteri della riga.

    Ma dato che parliamo di un file di testo sequenziale, con delle righe che non hanno lunghezza fissa, avresti problemi, ad esempio, a rimpiazzare una riga come

    1007 vite_lunga 500

    in una così

    1007 vite_lunga 8

    dato che le righe hanno lunghezza diversa.

    In questo caso, il metodo che si usa è leggere il primo file interamente e riscriverlo in un secondo file, con la riga modificata, cancellare il primo e rinominare il secondo.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.