Taul, vamos por partes:
Primero: El ampersand esta de mas. Creo que ya te he dicho, el identificador del array es un puntero que apunta a la primera posición de dicho arreglo. De la forma que lo haces solo funciona porque el puntero direcciona el mismo lugar que la primera referencia, intenta hacer lo mismo pero reservando memoria dinámica para el arreglo y veras mas claro el error.
Segundo: Si tienes 20 llamadas a scanf, y luego necesitas modificar el tamaño del arreglo, tienes que modificar todas las llamadas a scanf. Con fgets, la cantidad a leer es un argumento que puede ser pasado mediante -por ejemplo- una variable, una constante, una llamada a otra función, o lo que sea que se te ocurra.
Tercero: Precisamente leer de un archivo es leer desde un stream, y el input del teclado es precisamente, un stream.
Saludos!
Código (c) [Seleccionar]
scanf("%14s",®in.nombre);
Primero: El ampersand esta de mas. Creo que ya te he dicho, el identificador del array es un puntero que apunta a la primera posición de dicho arreglo. De la forma que lo haces solo funciona porque el puntero direcciona el mismo lugar que la primera referencia, intenta hacer lo mismo pero reservando memoria dinámica para el arreglo y veras mas claro el error.
Segundo: Si tienes 20 llamadas a scanf, y luego necesitas modificar el tamaño del arreglo, tienes que modificar todas las llamadas a scanf. Con fgets, la cantidad a leer es un argumento que puede ser pasado mediante -por ejemplo- una variable, una constante, una llamada a otra función, o lo que sea que se te ocurra.
Tercero: Precisamente leer de un archivo es leer desde un stream, y el input del teclado es precisamente, un stream.
Código (c) [Seleccionar]
fgets(buff,size,stdin);
Saludos!