Untitled

 avatar
unknown
c_cpp
19 days ago
2.8 kB
2
Indexable
/*
Scrivere un programma che riceve come argomenti da riga di comando un insieme di nomi di file di testo, ciascuno dei quali contenente una sequenza
di lunghezza indefinita di numeri interi. Tra tutti i file contenenti soltanto valori pari il programma stampa a video il nome di quello avente la sequenza
di numeri più lunga; nel caso ci siano più file che soddisfino tali condizioni, il programma stampa a video il nome del primo file trovato. Si noti che i file
non aperti vanno ignorati; inoltre nel caso non ci sia alcun file che soddisfi i requisti esposti, il programma deve visualizzare un apposito messaggio
di errore.
Esempio:
Se l’utente invoca il programma specificando i nomi dei file uno.txt, due.txt, tre.txt, quattro.txt e cinque.txt con il seguente
contenuto:
• Contenuto del file uno.txt: 2 5 4 10
• Contenuto del file due.txt: 2 4 6 2
• Il file tre.txt non viene aperto correttamente
• Contenuto del file quattro.txt: 2 2 4 6
• Contenuto del file cinque.txt: 2 2 4
Il programma stampa a video: due.txt*/

#include <stdio.h>

int main(int argc, char* argv[]) 
{
    if(argc >=2)
    {
        int maxLunghezza = 0;
        char *filePiuLungo = NULL;
        
        for(int i=1; i<argc; i++)
        {   
            int numero;
            
            FILE* file = fopen(argv[i], "r");
            if(file)
            {
                int tuttiPari = 1;
                int lunghezza =0;
                
                while(fscanf(file, "%d",&numero)==1 && tuttiPari)
                {
                    if(numero%2!=0)
                    {
                        tuttiPari=0;
                    }else{
                        lunghezza++;
                    }
                }
                
                fclose(file);
                
                if(lunghezza > maxLunghezza && tuttiPari)
                {
                    maxLunghezza = lunghezza;
                    filePiuLungo=argv[i];
                    /*
                    In questo caso non è necessario fare una strcpy() perché filePiuLungo è un puntatore a caratteri (char*) e noi gli stiamo assegnando l'indirizzo di memoria dell'argomento argv[i], che è anch'esso un puntatore  a caratteri.
                    
                    Quindi non stiamo copiando la stringa vera e propria, stiamo solo facendo puntare filePiuLungo allo stesso indirizzo di memoria dove si trova la stringa argv[i].
                    */
                }
                
            }else{
                printf("Errore apertura file");
            }
        }
        
        if(filePiuLungo != NULL){
            printf("%s\n", filePiuLungo);
        }else{
            printf("Nessuna file contiene solo numeri pari\n");
        }
        
    }else{
        printf("Numero di argomenti insuff.");
    }

    return 0;
}




Leave a Comment