Salve a tutti, sono nuovo del forum e ho deciso di iscrivermi perchè ho più volte trovato soluzione ai miei dubbi seguendo vostre vecchie discussioni, ma ora ho bisogno di voi(Se c'è una sezione di presentazione linkate pure se è prassi ). Di seguito vi linko il mio codice che è suddiviso in 7 richieste anche se qui ne sono presenti solo 4, il problema che mi ha bloccato è presente nel punto 4 "case 4:" cioe nell'ordinamento alfabetico delle parole presenti in un file.txt che io devo andare a leggere... Qualcuno di voi sarebbe così gentile da aiutarmi? Voglio capire il procedimento...
P.s.
I primi 3 punti sono funzionanti. Per provare il codice basta compilare ed eseguire il programma su cygwin ----- > gcc main.c -o main.exe -----> ./main.exe file.txt

Ecco il codice:

codice:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>



//Prototipi delle funzioni
void checkFile(FILE *pFile);
void stampaFileAVideo(FILE *pFile);
void copiaFile(FILE *pFile);

void main(int argc, char *argv[]){
    
    
    FILE *pFile= fopen(argv[1], "r");
    int scelta;
    
    
    //Controllo se i parametri passati sono effettivamente 2, nome programma e file txt
    if(argc<2){
        printf("\n\n\nErrore nel passaggio dei parametri... \n");
        printf("Ritenta l'inserimento e riprova ad eseguire... \n\n\n");
        exit(1);
    }
    
    
    //Controlla eventuali errori sul passaggio del file txt al programma in cygwin
    if(pFile==NULL){
            printf("\n\n\nErrore nel passaggio del file txt dal quale leggere! \n");
            printf("Probabile errore grammaticale o di omissione di un file txt... \n\n\n");
            exit(1);
        }
    
    
    printf("\n*************************** Operazioni su file .txt disponibili ***************************\n\n\n");
    printf("1) Controlla se il file .txt e' vuoto o no\n");
    printf("2) Stampa a video il contenuto del file .txt\n");
    printf("3) Duplica il file .txt\n");
    printf("4) Ordina il contenuto del file .txt in modo alfabetico\n");
    printf("\n\n\nInserisci la tua scelta e premi 'Invio' ---> ");
    scanf("%d", &scelta);
    
    switch(scelta){
        
        case 1:
            
            printf("\n\n\n\n\n*************************** Stato del file .txt ***************************\n\n");
            checkFile(pFile);
            break;
        
        
        case 2:    
        
            printf("\n\n\n\n\n*************************** Contenuto del file .txt ***************************\n\n");
            stampaFileAVideo(pFile);
            printf("\n\n");
            break;
            
            
        case 3:
        
            printf("\n\n\n\n\n*************************** Duplicazione del file .txt ***************************\n\n");
            printf("Il file da copiare e' parole.txt passato da shell...\n\n\n");
            
            copiaFile(pFile);
    
            break;
            
        
        case 4:
            
            printf("\n\n\n\n\n************ Ordinamento alfabetico del file .txt ********\n\n");
            printf("********* Contenuto del file non ordinato *********\n\n");
            stampaFileAVideo(pFile);
            printf("\n\n\n\n********* Contenuto del file ordinato in modo alfabetico *****\n\n");
            stampaFileOrdinatoAVideo(parametro/i); //ad esempio
//Ora io qui avevo pensato di creare una versione modifica di "stampaFileAVideo" che
//però stampa a video un elenco ordinato alfabeticamente, ma non la so fare...


    }
    
    //Chiude il file
    fclose(pFile);
}


//Controlla se il file passato da shell è vuoto o contiene caratteri
void checkFile(FILE *pFile){
        
        
        char c= getc(pFile);
        
        if(feof(pFile)){
            printf("\nIl file .txt e' vuoto...\n\n\n");
            exit(1);
        } else {
            printf("\nIl file .txt non e' vuoto\n\n\n");
            exit(1);
        }
}



//Stampa il contenuto del file .txt a video 
void stampaFileAVideo(FILE *pFile){
    
    char *buffer;  //Oppure buffer[200]
    char *parolaLetta;
    
    while(1){
        parolaLetta=fgets(buffer, 200, pFile);
        if( parolaLetta==NULL )
        break;
        printf("%s", buffer);
    }
        
}


//Copia il file che passo come parametro in un secondo file.txt del quale specifico il nome
void copiaFile(FILE *pFile){
    
    char tf[100], ch;
    FILE *pFileOut;
    
    printf("Inserisci il nome del file in cui copiare parole.txt(non dimenticare l'estensione): ");
    scanf("%s",tf);
    pFileOut=fopen(tf, "w");                    
             
    while( ( ch = getc(pFile) ) != EOF )
            putc(ch, pFileOut);
            printf("\n\n\n\nIl file e' stato copiato con successo!\n");
}