Memoria dinamica matriz

Iniciado por programacion_c, 24 Abril 2012, 23:42 PM

0 Miembros y 1 Visitante están viendo este tema.

programacion_c

Hola tengo que hacer un programa en c que lea nombres desde teclado y los ordene alfabeticamente.

He hecho el programa para que acepte 10 nombres. El codigo es el siguiente :

codigo[#include <stdio.h>
#include <stdlib.h>
void main(void)
{
    char **cadena, *aux;
    int i, j, n;
    char temp[20];
    printf("%s%s\n", "Este programa ordena diez nombres",
        "introducidos por teclado.");
    printf("Introduzca los diez nombres:\n");
    cadena = (char**)malloc(10*sizeof(char*));
    for (i=0; i<10; i++) {
        printf("Nombre %d: ", i+1);
        scanf(" %[^\n]", temp);
        cadena = (char*)malloc((strlen(temp)+1)*sizeof(char));
        strcpy(cadena, temp);
    }
    for (i=0; i<9; i++)
        for (j=i+1; j<10; j++)
           if ((strcmp(cadena, cadena[j])) > 0) {
               aux = cadena;
               cadena = cadena[j];
               cadena[j] = aux;
           }
    printf("La lista ordenada es:\n");
    for (i=0; i<10 ; i++)
        printf("%s\n", cadena);
}]

Mi pregunta es, que es lo que tendria que cambiar para que el programa acepte "n" nombre hasta el caracter EOF.
Lo he intentado de varias formas pero siempre me da warning por culpa de los punteros.
Alguien me podria ayudar,?
Muchas gracias

david_BS

si la cantidad de ingresos se da por teclado vez x vez, por ahí podés usar realloc para redimensionar el bloque de memoria inicial. distinto si tu programa pregunta cuantas palabras desea ingresar y vos le ponés 5 suponete y entonces hacés un malloc para 5.

realloc