|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
[C]passaggio di parametri ad una funzione
Ciao a tutti!
Ho fatto una funzione all'interno di un programma ma evidentemente ho sbagliato qualcosa perché non riesco a farla andare..solitamente non ho mai avuto problemi a farne mentre questa qualche problema me lo crea ![]() E' una cosa che impiega pochi minuti! Grazie mille..vi allego il codice e segnalo in maiuscolo dove è la chiamata alla funzione e cosa deve fare! Codice:
#include <stdio.h> //Direttive al pre processore che ci permettono di includere #include <string.h> //gli haeder file,relativi a librerie standar. #include <stdlib.h> #include <limits.h> #include <assert.h> //#include "utils.h" //Viene incluso l'header file da me creato, le "" indicano al //compilatore di cercare prima nella directory corrente. // definizione della funzione ASSERT() con stampa di un messaggio di errore #define ASSERT( condizionedaverificare, cosafare ) { if ( !(condizionedaverificare) ) { printf cosafare; printf("\n"); assert( condizionedaverificare ); } } struct lista{ //Dichiarazione della lista usata dalla funzione aggiuntiva char parola[257]; //Dichiarazione di un array di lunghezza massima 1024 adibito a contenere la parola int frequenza; //Dichiarazione di una varibile adibita a contenere la frequenza della parola struct lista *next; //Dichiarazione di un puntatore per lo spostamento all'interno della lista }; /* LA FUNZIONE!! void inserisci_in_lista(struct lista *ptr,char buffer[],int conta) { //inserisci in lista prev = NULL; temp = testa; while(temp != NULL && strcmp(bufferLettura,temp->parola) != 0) { prev = temp; temp = temp->next; //Incremento il puntatore per avanzare nella scansione della lista } if (temp == NULL) { nuovo=(struct lista*)malloc(sizeof(struct lista)); //Allocazione dinamica della memoria di una nuova cella della lista tramite la funzione malloc strncpy(nuovo->parola,bufferLettura,contaLettere); nuovo->frequenza=1; //Impostazione della frequenza della parola a 1 nuovo->next = NULL; if (testa != NULL) prev->next = nuovo; else testa = nuovo; } else temp->frequenza++; } */ void funzioneAusiliaria( unsigned char *nomeDelFile) { /** *Il primo passo dell'algoritmo della funzione conteggio_cento prevede la dichiarazione di tutte le variabili che occorrono per il suo svolgimento e infine la creazione del nuovo *file dove successivamente verranno inserite le parole con le successive frequenze. */ FILE *fileTesto=NULL,*fpw=NULL ; char *centoParole; char bufferLettura[257]; char lettera; int contaLettere = 0; int contaParole=0; struct lista *nuovo; struct lista *testa; struct lista *temp, *temp2, *prev; testa=NULL; centoParole = (char*)malloc(sizeof(char)*(strlen(nomeDelFile)+7)); strcpy(centoParole,nomeDelFile); strcat(centoParole,".world"); printf("\nIl nome del file creato dalla funzione ausiliaria e': %s\n",centoParole); fflush(stdout); fileTesto=fopen(nomeDelFile,"r"); //apertura del file di testo in modalità lettura ASSERT((fileTesto!=NULL),("\nErrore nell'apertura del file di testo!\n")); //controllo se il fileTesto è vuoto lettera=fgetc(fileTesto); if(feof(fileTesto)) { printf("\nFile vuoto!"); fclose(fileTesto); exit(1); } while(lettera != EOF) { if (lettera!=' ') { if (contaLettere < 256) { bufferLettura[contaLettere]=lettera; } contaLettere++; } else { if (contaLettere > 0 && contaLettere <= 256) { // * CHIAMATA DELLA FUNZIONE * // * FUNZIONE: //inserisci_in_lista(struct lista *testa,char bufferLettura[],int contaLettere); //INIZIO DI CIò CHE DEVE FARE LA FUNZIONE: bufferLettura[contaLettere]='\0'; prev = NULL; temp = testa; while(temp != NULL && strcmp(bufferLettura,temp->parola) != 0) { prev = temp; temp = temp->next; //Incremento il puntatore per avanzare nella scansione della lista } if (temp == NULL) { nuovo=(struct lista*)malloc(sizeof(struct lista)); //Allocazione dinamica della memoria di una nuova cella della lista tramite la funzione malloc strncpy(nuovo->parola,bufferLettura,contaLettere); nuovo->frequenza=1; //Impostazione della frequenza della parola a 1 nuovo->next = NULL; if (testa != NULL) prev->next = nuovo; else testa = nuovo; } else temp->frequenza++; } //FINE DI CIò CHE DEVE FARE LA FUNZIONE bufferLettura[0]='\0'; contaLettere=0; } lettera=fgetc(fileTesto); } if (contaLettere > 0 && contaLettere <= 256) //inserisci in lista { // * CHIAMATA DELLA FUNZIONE * // * FUNZIONE: //inserisci_in_lista(struct lista *testa,char bufferLettura[],int contaLettere); //INIZIO DI CIò CHE DEVE FARE LA FUNZIONE: prev = NULL; temp = testa; while(temp != NULL && strcmp(bufferLettura,temp->parola) != 0) { prev = temp; temp = temp->next; //Incremento il puntatore per avanzare nella scansione della lista } if (temp == NULL) { nuovo=(struct lista*)malloc(sizeof(struct lista)); //Allocazione dinamica della memoria di una nuova cella della lista tramite la funzione malloc strncpy(nuovo->parola,bufferLettura,contaLettere); nuovo->frequenza=1; //Impostazione della frequenza della parola a 1 nuovo->next = NULL; if (testa != NULL) prev->next = nuovo; else testa = nuovo; } else temp->frequenza++; } //FINE DI CIò CHE DEVE FARE LA FUNZIONE //ordinamento lista printf("\n ordinamento lista"); temp = testa; testa = NULL; while (temp != NULL) { temp2 = testa; prev = NULL; while (temp2 != NULL && temp->frequenza < temp2->frequenza) { prev = temp2; temp2 = temp2->next; } if (prev != NULL) prev->next = temp; else testa = temp; prev = temp->next; temp->next = temp2; temp = prev; } printf("\n Stampa su file"); //scrittura file 100 parole fpw=fopen(centoParole,"w"); //utilizziamo prev per poter controllare la frequenza della centesima parola e delle successive.se hanno la stessa frequenza le stampiamo temp = testa; prev=temp; while (temp != NULL && contaParole<100) { fprintf(fpw,"%d %s\n", temp->frequenza, temp->parola); contaParole++; prev=temp; temp = temp->next; } //fare controllo su temp if(temp == NULL) { fclose(fpw); fclose(fileTesto); exit(0); } while (prev->frequenza == temp->frequenza) { fprintf(fpw,"%d %s\n", temp->frequenza, temp->parola); prev=temp; temp = temp->next; } fclose(fpw); fclose(fileTesto); } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:15.