07/06/13 6:55
ChiaraB92
Ho scritto questo programma in C. 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:
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:
#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 ; } }
aaa