ho scritto il primo punto di 3 della consegna di un esame passato, ma mi dà appunto un errore di segmentazione.
la consegna è:
per quanto riguarda il MAIN la consegna è:si definisca una funzione double* leggiSequenza(char* nomeFile, int*size) in grado di aprire il file nomeFile(parametro IN), leggere la prima riga contenente il numero di elementi che seguono e poi la sequenza di numeri in virgola mobile. i numeri devono essere inseriti in un vettore allocato all'interno della funzione e fornito all'esterno tramite il valore di ritorno della funzione. i valori negativi devono essere cambiati di segno in modo che la sequenza ritornata contenga solo valori positivi. il numero di elementi letti (quindi la dimensione di seq) o -1 in caso di errore viene fornito nel parametro (OUTPUT) size.
prendere da riga di comando il nome di un file contenente il numero di elementi ed una sequenza di numeri in virgola mobile.
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double* leggiSequenza (char* nomeFile, int* size)
{
FILE* fp;
fp=fopen("nomeFile","r");
if (!fp)
{
printf("ERRORE nell' aprire il file %s in lettura\n",nomeFile);
exit;
}
const int MAX = 100;
int numletti;
int numelem;
double* seq=NULL;
int i;
double num;
numletti=fscanf(fp,"%d",&numelem);
printf("%d\n",numelem);
if (numletti>1)
{
printf("formato file errato\n");
exit;
}
seq=(double*)malloc(numelem*sizeof(double));
while (!feof(fp))
{
fscanf(fp,"%lf",&num);
if (num<0)
{
num=-num;
}
seq[i]=num;
i++;
}
*size=i;
return seq;
}
int main(int argc, char** argv)
{
int size=0;
int i;
double sequenza;
sequenza=*leggiSequenza(argv[1],&size);
for (i=0;i<size;i++)
printf("%lf",sequenza+i);
printf("\n");
}
grazie in anticipo.