Salve ragazzi,
sono nuovo del forum e non molto esperto di programmazione C; vado subito al dunque:
ho scritto un programma in C che legge da un file .txt e, per ogni riga letta dal file di input, fa un'operazione e scrive il risultato su un file di output sempre di tipo .txt.
Il programma funziona correttamente, ma, indipendentemente dal numero di righe del file di input, sul file di output non vengono mai scritte più di 508 righe. Non riesco a capire il perchè. Vi allego il codice. Spero che possiate darmi una mano. Ringrazio tutti anticipatamente.
CODICE:
_______________________
#include <stdio.h>
#include <stdlib.h>
#define kFileDaLeggere "input.txt"
#define kFileDaScrivere "output.txt"
#define kLunghezzaMaxStringa 400
#define kErroreIO -1
#define kErroreMemoria -2
#define kNessunErrore 0
char *nextLine;
char *contributo;
int numeroAutori;
int main (void);
int LeggiProssimaRiga(void);
int ScriviContributo(void);
int CalcolaContributo(void);
int CalcolaContributoIntraM(void);
int CalcolaContributoExtraM(void);
int CalcolaContributoNormal(void);
void substring(char* dest, char *source, int i_base, int i_dim);
int main (void)
{
int erroreAperturaFile;
erroreAperturaFile=LeggiProssimaRiga();
if(erroreAperturaFile)
return erroreAperturaFile;
printf("Elaborazione conclusa.\n\n");
return kNessunErrore;
}
int LeggiProssimaRiga(void)
{
FILE *ingresso;
int erroreAperturaFile;
printf("\n\nLettura dal file %s\n\n\n",kFileDaLeggere);
ingresso=fopen(kFileDaLeggere,"r");
if(ingresso==NULL)
return kErroreIO;
nextLine=calloc(kLunghezzaMaxStringa,sizeof(char)) ;
if(nextLine==NULL)
return kErroreMemoria;
contributo=calloc(kLunghezzaMaxStringa,sizeof(char ));
if(contributo==NULL)
return kErroreMemoria;
printf("Elaborazione in corso...\n\n\n");
while (!feof(ingresso)){
fscanf(ingresso,"%s",nextLine);
//printf("Stringa: %s\n",nextLine);
//printf("\n");
CalcolaContributo();
erroreAperturaFile=ScriviContributo();
if(erroreAperturaFile)
return erroreAperturaFile;
}
fclose(ingresso);
return kNessunErrore;
}
int ScriviContributo(void)
{
FILE *uscita;
uscita=fopen(kFileDaScrivere,"a");
if(uscita==NULL)
return kErroreIO;
fprintf(uscita,"%s\n",contributo);
return kNessunErrore;
}
int CalcolaContributo(void){
char *numeroAutoriString;
numeroAutoriString=calloc(kLunghezzaMaxStringa,siz eof(char));
if(numeroAutoriString==NULL)
return kErroreMemoria;
substring(numeroAutoriString,nextLine,2,(int)strle n(nextLine));
//printf("Stringa: %s\n",numeroAutoriString);
numeroAutori=atoi(numeroAutoriString);
//printf("Intero: %u\n",numeroAutori);
if(nextLine[0]=='N') CalcolaContributoNormal();
else if(numeroAutori==1) sprintf(contributo,"1");
else if(numeroAutori==2) sprintf(contributo,"0.500; 0.500");
else if(numeroAutori==3) sprintf(contributo,"0.400; 0.200; 0.400");
else if(numeroAutori>3 && nextLine[0]=='I')CalcolaContributoIntraM();
else if(numeroAutori>3 && nextLine[0]=='E')CalcolaContributoExtraM();
}
int CalcolaContributoIntraM(void){
sprintf(contributo,"0.400; ");
double contributiIntermedi=(0.2)/(numeroAutori-2);
//printf("Double:%f\n",contributiIntermedi);
char *temp;
temp=calloc(kLunghezzaMaxStringa,sizeof(char));
if(temp==NULL)
return kErroreMemoria;
sprintf(temp,"%f",contributiIntermedi);
//printf("temp:%s\n",temp);
char *contributiIntermediString;
contributiIntermediString=calloc(kLunghezzaMaxStri nga,sizeof(char));
if(contributiIntermediString==NULL)
return kErroreMemoria;
substring(contributiIntermediString,temp,0,5);
strcat(contributiIntermediString,"; ");
//printf("String:%s\n",contributiIntermediString);
int i=0;
for(i;i<numeroAutori-2;i++){
strcat(contributo,contributiIntermediString);
//printf("Contributo:%s\n",contributo);
}
strcat(contributo,"0.400");
//printf("Contributo:%s\n",contributo);
}
int CalcolaContributoExtraM(void){
sprintf(contributo,"0.300; 0.150; ");
double contributiIntermedi=(0.1)/(numeroAutori-4);
//printf("Double:%f\n",contributiIntermedi);
char *temp;
temp=calloc(kLunghezzaMaxStringa,sizeof(char));
if(temp==NULL)
return kErroreMemoria;
sprintf(temp,"%f",contributiIntermedi);
//printf("temp:%s\n",temp);
char *contributiIntermediString;
contributiIntermediString=calloc(kLunghezzaMaxStri nga,sizeof(char));
if(contributiIntermediString==NULL)
return kErroreMemoria;
substring(contributiIntermediString,temp,0,5);
strcat(contributiIntermediString,"; ");
//printf("String:%s\n",contributiIntermediString);
int i=0;
for(i;i<numeroAutori-4;i++){
strcat(contributo,contributiIntermediString);
//printf("Contributo:%s\n",contributo);
}
strcat(contributo,"0.150; 0.300");
//printf("Contributo:%s\n",contributo);
}
int CalcolaContributoNormal(void){
//"pulisco" la variabile contributo
sprintf(contributo,"");
double contributi=(1.0)/(numeroAutori);
//printf("Double:%f\n",contributi);
char *temp;
temp=calloc(kLunghezzaMaxStringa,sizeof(char));
if(temp==NULL)
return kErroreMemoria;
sprintf(temp,"%f",contributi);
//printf("temp:%s\n",temp);
char *contributiString;
contributiString=calloc(kLunghezzaMaxStringa,sizeo f(char));
if(contributiString==NULL)
return kErroreMemoria;
substring(contributiString,temp,0,5);
strcat(contributiString,"; ");
//printf("String:%s\n",contributiIntermediString);
int i=0;
for(i;i<numeroAutori;i++){
strcat(contributo,contributiString);
//printf("Contributo:%s\n",contributo);
}
substring(contributo,contributo,0,(int)strlen(cont ributo)-2);
}
void substring(char* dest, char *source, int i_base, int i_dim){
int i = 0;
for (i=i_base; i<i_dim; i++){
dest[i-i_base] = source[i];
}
//Aggiungo carattere di terminazione:
dest[i]='\0';
return;
}
_______________________