Ciao a tutti![]()
Ho scritto questo programma in C che deve stampare una lista di tutte le parole chiave (che trova nel file che gli passo come secondo parametro) che trova nel testo (che è il file che gli passo come primo parametro) sul file che gli passo come terzo parametro con il numero delle righe in cui compaiono.
Non mi da nessun errore di compilazione e neanche di esecuzione però non produce il risultato desiderato, perchè? Non riesco a trovare l'errore.
Questo è il codice del programma:
Esempi dei file che passo come parametri:codice:#include <stdio.h> #include <stdlib.h> #include <string.h> //Funzione per gestire gli errori void printerror(char *str, int n) { fprintf(stderr, "Errore %d: %s\n", n, str); exit(n); } //Funzione che trova la parola che gli passo in fileIn e scrive in fileOut void trovaParola(char *parola, FILE *fileOut, FILE *fileIn) { char t[100]; char *riga; int priga; //priga è il contatore delle righe char *p; riga = fgets(t, 100, fileIn); // leggo la prima riga del file //Scrivo la parola chiave nel file di output if(fputs(parola, fileOut) == EOF){ printerror("Errore nella scrittura della parola nel secondo file.", 3); } priga=1; while (riga != NULL){ //fino alla fine del testo p = strstr(riga, parola); //guardo se la parola chiave è presente nella riga if (p != NULL){ // p=NULL se non ha trovato la parola nella riga if(fprintf(fileOut, "%d\n", priga) == EOF){ //scrivo il numero della riga nel file di output printerror("Errore nella scrittura della riga nel secondo file.", 3); } } riga = fgets(t, 100, fileIn); //vado alla riga successiva priga++; //incremento il contatore } } //Funzione che conta le righe in fileIn e cioè le parole chiave int contaRighe(FILE *fileIn) { int righe=0, i; i = fgetc(fileIn); while (i != EOF){ if (i == '\n'){ righe++; } i = fgetc(fileIn); } return righe; } int main(int argc, char *argv[]) { FILE *fin_t; FILE *fin_p; FILE *fout; char p[20]; char *parola; int r, i; int chiudit, chiudip, chiudio; if (argc != 4){ printerror("Specificare tre file come argomenti.\n", 1); } fin_t = fopen(argv[1],"r"); if (fin_t == NULL){ printerror("Errore nell’apertura del primo file.\n", 2); } fin_p = fopen(argv[2],"r"); if (fin_p == NULL){ printerror("Errore nell’apertura del secondo file.\n", 2); } fout = fopen(argv[3],"w"); if (fout == NULL){ printerror("Errore nell’apertura del terzo file.\n", 2); } r = contaRighe(fin_p); //guardo quante parole chiave ho rewind(fin_p); //rimetto il puntatore all'inizio del file parola = fgets(p, 20, fin_p); for(i=0; i<r; i++){ //per quante volte sono le parole chiave trovaParola(parola, fout, fin_t); //eseguo la funzione trovaParola() parola = fgets(p, 20, fin_p); //vado alla parola successiva rewind(fin_t); //rimetto il puntatore all'inizio del file in modo da passarlo tutto ogni volta } chiudit = fclose(fin_t); if(chiudit == 0){ printf("Chiusura del primo file corretta.\n"); }else{ printf("Errore nella chiusura del primo file.\n"); return ; } chiudip = fclose(fin_p); if(chiudip == 0){ printf("Chiusura del primo file corretta.\n"); }else{ printf("Errore nella chiusura del primo file.\n"); return ; } chiudio = fclose(fout); if(chiudio == 0){ printf("Chiusura del secondo file corretta.\n"); }else{ printf("Errore nella chiusura del secondo file.\n"); return ; } }
-parole_chiave.txt
testo
programma
parole
file
-testo.txt
Questo è il testo dove il programma
deve cercare le parole chiave
che sono scritte nel file
e scrivere il risultato nel file ris.txt
-il risultato corretto che deve scrivere nel file ris.txt è:
testo
1
programma
1
parole
2
file
3
4
grazie mille e tutti!![]()

Rispondi quotando