Buenos días.
¿Alguien sabe por que me da violacion de segmento (core generado) este código?
Incluyo tambien el fichero por si puede ayudar.
/*Incluyo las libreria stdio.h porque voy a usar ficheros*/
#include<stdio.h>
/*Añado la libreria string.h para poder usar strings o cadenas*/
#include<string.h>
/*Defino las longitudes maximas dpara vectores y cadenas de caracteres*/
#define DIMMAX 200
#define STRMAX 200
/*Realizo la primera funcion del programa, en la cual pido el nombre del fichero de lectura.
Argumentos de entrada:
char NombreFichero[]: Variable de tipo char donde tengo el nombre del fichero de lectura
FILE* Fichero: Variable de tipo FILE donde esta el fichero de lectura de datos
Argumentos de salida:
No tiene
*/
void pedirNombre(){
char NombreFichero[100];
FILE* Fichero;
/*Uso un bucle do...while, para pedir el fichero hasta que se logre abrir*/
do {
printf("Dame el nombre del fichero: "); scanf("%s",NombreFichero
); Fichero
= fopen(NombreFichero
,"r");/*Si no lo logra abrir, se lo comunica al usuario por pantalla*/
if(Fichero==NULL){
perror("No se consiguio abrir el fichero\n"); }
} while(Fichero==NULL);
}
/*Hago la funcion principal, donde recopilo toda la informacion de mi programa*/
int main(){
char NombreFich[STRMAX];
FILE* Fich;
float CantidadNumeros,Numeros[DIMMAX],SumaNumeros,Media;
int i;
/*Llamo a la funcion anterior*/
pedirNombre(&NombreFich,&Fich);
/*Abro el fichero de lectura de datos*/
Fich
= fopen(NombreFich
,"r");/*Inicializo las variables a 0 para el bucle, que me recorrera todo el fichero*/
CantidadNumeros = 0;
SumaNumeros = 0;
i = 0;
/*Leo los numeros del fichero y los almaceno en un array flotante*/
fscanf(Fich
,"%f ",&Numeros
[i
]); /*Sumo dichos numeros*/
SumaNumeros = SumaNumeros + Numeros[i];
i = i + 1;
CantidadNumeros = CantidadNumeros + 1;
}
/*Calculo la media de los numeros y devuelvo la informacion por pantalla*/
Media = SumaNumeros / CantidadNumeros;
printf("En el fichero hay: %.0f numeros\nLa media de los numeros del fichero es: %f\n",CantidadNumeros
,Media
); /*Cierro el fichero al acabar el programa*/
}