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");
}