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

    [C]ricevere da linea di comando il nome di due file

    Buongiorno a tutti!
    Cosa significa quando viene richiesto: "ricevere da linea di comando il nome di due file"?
    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Significa che dovrai richiamare il tuo programma da riga di comando più o meno così

    nome_programma nome_file1 nome_file2

    cioè devi passargli dall'esterno i nomi di due file che poi probabilmente verranno gestiti in qualche modo all'interno del programma stesso. Se usi un IDE, ci sarà sicuramente qualche opzione da qualche parte per specificare argomenti per il programma.
    Se non sai come gestire gli argomenti da riga di comando, vediti i parametri della funzione main() argc e argv.
    every day above ground is a good one

  3. #3
    Ok grazie per la tua risposta!
    Sto facendo un programma dove devo leggere da un primo file una lista di dipendenti di un'azienda e memorizzarne l'intero contenuto in una lista LIFO.(questo l'ho fatto). Poi devo memorizzare l'elenco ordinato sul secondo file.

    Ho fatto tutto ma non si crea il secondo file dove dovrebbe esserci tutto ordinato.
    Ecco il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX 50+1
    
    struct myStruct {
           char *cognomeNome;
           char *codiceFiscale;
           int numSettLavorate;
           int **matrice;
           int totaleOreLavorate;
           struct myStruct *nextPtr;
           };
    typedef struct myStruct STRUCT;
    
    STRUCT *readFile( FILE *fr, STRUCT *head, char *cognome, char *nome, char *codFiscale, int numSettLav);
    void writeFile( FILE *fw, STRUCT *head );
    void dealloca( STRUCT *head);
    
    int main( int argc, char **argv )
    {
        char cognome[MAX], nome[MAX], codFiscale[17];
        int numSettLav;
        FILE *fr, *fw;
        STRUCT *head = NULL;
        
        if ( argc != 3 )
        {
             fprintf(stdout,"Run program as:\n /name <fileIn> <fileOut>\n");
             fflush(stdout);
             exit(1);
        }
        
        fr = fopen(argv[1], "r");
        fw = fopen(argv[2], "w");
        if( fr == NULL || fw == NULL )
        {
            printf("Errore di apertura del file\n");
            exit(1);
        }
        
        while( fscanf(fr, "%s%s%s%d", cognome, nome, codFiscale, &numSettLav) != EOF )
        {
               head = readFile(fr, head, cognome, nome, codFiscale, numSettLav);
        }
        
        writeFile(fw, head);
        
        dealloca(head);
        
        fclose(fr);
        fclose(fw);
        
        system("pause");
        
    }
    
    STRUCT *readFile( FILE *fr, STRUCT *head, char *cognome, char *nome, char *codFiscale, int numSettLav )
    {
           STRUCT *e, *p1, *p2;
           char buf[MAX * 2];
           int numSettimana, numGiorniLav, i, j;
           
           e = (STRUCT *) malloc(sizeof(STRUCT));
           if( e == NULL )
           {
               fprintf(stderr, "Errore di allocazione\n");
               exit(1);
           }
           strcpy(buf, cognome);
           strcat(buf, " ");
           strcat(buf, nome);
           e->cognomeNome = (char *) malloc((strlen(buf) + 1) * sizeof(char));
           if( e->cognomeNome == NULL )
           {
               fprintf(stderr, "Errore di allocazione.\n");
               exit(1);
           }
           strcpy(e->cognomeNome, buf);
           strcpy(e->codiceFiscale, codFiscale);
           e->numSettLavorate = numSettLav;
           
           e->totaleOreLavorate = 0;
           
           e->matrice = (int **) malloc(numSettLav * sizeof(int *));
           if( e->matrice == NULL )
           {
               printf("Errore di allocazione.\n");
               exit(1);
           }
           for( i = 0; i < numSettLav; i++ )
           {
                fscanf(fr, "%d %d", &numSettimana, &numGiorniLav);
                if( e->matrice[i] == NULL )
                {
                    printf("Errore di allocazione.\n");
                    exit(1);
                }
                e->matrice[i][0] = numSettimana;
                e->matrice[i][1] = numGiorniLav;
                
                for( j = 0; j < numGiorniLav; j++ )
                {
                     fscanf(fr, "%d ", &e->matrice[i][j + 2]);
                     e->totaleOreLavorate = e->totaleOreLavorate + e->matrice[i][j + 2];
                }
           }
           
           if( head == NULL || (e->totaleOreLavorate) < (head->totaleOreLavorate))
           {
               e->nextPtr = head;
               return(e);
           }
           
           p1 = head;
           p2 = head->nextPtr;
           while( p2 != NULL && (p2->totaleOreLavorate) < (e->totaleOreLavorate) )
           {
                  p1 = p2;
                  p1->nextPtr = p2->nextPtr; /* non sono sicuro */
           }
           p1->nextPtr = e;
           e->nextPtr = p2;
           
           return(head);
           
    }
    
    void writeFile( FILE *fw, STRUCT *head )
    {
         int i, j;
         STRUCT *e;
         
         e = head;
         
         while( e != NULL )
         {
                fprintf(fw, "%s %s %d\n", e->cognomeNome, e->codiceFiscale, e->numSettLavorate);
                
                for( i = 0; i < e->numSettLavorate; i++ )
                {
                     for( j = 0; j < e->matrice[i][1]+2; j++ )
                     {
                          fprintf(fw, "%d ", e->matrice[i][j]);
                     }
                     fprintf(fw, "\n");
                }
                e = e->nextPtr;
         }
         return;
    }
    
    void dealloca( STRUCT *head )
    {
         int i;
         STRUCT *e;
         
         while( head != NULL )
         {
                for( i = 0; i < head->numSettLavorate; i++ )
                {
                     free(head->matrice[i]);
                }
                free(head->matrice);
                free(head->cognomeNome);
                e = head;
                head = head->nextPtr;
                free(e);
         }
         return;
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.