segmentation fault escribió:
El programa original podría quedar tal que así:
#include <stdio.h>
#include <stdio_ext.h>
#include <unistd.h>
#include <stdlib.h>
int N; /*Numero de elementos*/
int a;
char respuesta='n';
float *longitud;
int main(){
printf("number of elements? [1-100]\n");
scanf("%d",&N);
longitud = (float*)malloc(N*sizeof(float));
while(respuesta=='n'){
printf("enter element length, starting from reflector to last
director [mm]\n");
for (a=0;a<N;a++) {
printf("element number %d : ",a);
scanf("%f",(longitud+a));
}
printf("You have entered:\n");
for (a=0;a<N;a++) {
printf("element number %d : ",a);
printf("%f\n",*(longitud+a));
}
printf("is data correct? [y/n]\n");
__fpurge(stdin);
respuesta=getchar();
}
exit(0);
}
Muchísimas gracias a todos por vuestras magníficas explicaciones. Ahora
creo que lo he entendido de una vez. En especial al señor "segmentation
fault" por el extenso escrito. A partir de ahora andaré siempre
con cuidado con los búfers a la hora de leer datos. Digamos que el C
está más cerca del ensamblador que del BASIC :-) . El tema de los
punteros, que en un principio generaba en mí un poco de rechazo, me doy
cuenta de que tiene una potencia increíble y es muy elegante. Muy
elegante lo del malloc, tomaré nota. (Qué burro yo con el float
longitud[100])..... hala, como sobra memoria....
Gracias a todos, hay veces que con las páginas del manual y los libros
no termina uno de tenerlo claro.
Saludos.
Ramiro.