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.




Responder a