Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: programacion_c en 24 Abril 2012, 23:42 pm



Título: Memoria dinamica matriz
Publicado por: programacion_c en 24 Abril 2012, 23:42 pm
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


Título: Re: Memoria dinamica matriz
Publicado por: david_BS en 25 Abril 2012, 00:23 am
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 (http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/)