Problema con cadena de caracteres en C.

Iniciado por GilbertoBrewer, 26 Octubre 2014, 04:28 AM

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

GilbertoBrewer

Buenas noches y muchas gracias por sus aportaciones.

Continuando con el mismo programa, ahora tengo que hacer que, una vez generada la lista con los 10 nombres y apellidos al azar, se organicen alfabéticamente.

El problema es que por alguna razón que desconozco completamente, no me muestra las cadenas como debería al intentar ordenarlas. Ya llevo horas tratando de ver dónde podría estar mal, pero no logro dar con lo que debo cambiar.

El programa lo hice así:
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main ()
{
    char nombre[15][10]={"Pedro","Paco","Perla","Paola","Jorge","Jesus","Maria","Jose","Elisa","Angel"};
    char apellido[15][10]={"Perez","Lopez","Barba","Cruz","Robles","Gomez","Gaytan","Duval","Derbez","Padilla"};
    char nom[30][10];
    char nomord[30][10];
    char opcion;
    int a,b,i,j,lugar,comparar,largo[10];
    srand (time (NULL));

    printf ("Escoge una opcion:\n");
        printf ("a-Generar 10 nombres\n");
        printf ("b-Ordenarlos alfabeticamente\n");
        printf ("s-Salir\n");
        scanf("%s",&opcion);

    while (opcion!='s')
    {
        switch (opcion)
        {
        case 'a':
            printf ("\nNombres:\n");
            for (i=0; i<10; i++)
            {
                a=rand()%10;
                b=rand()%10;
                sprintf (nom[i],"%s %s%s",nombre[a],apellido[b],"\0");
                largo[i]=strlen(nom[i]);
                printf ("%d- %s - %d\n",i+1,nom[i],largo[i]);
            }
            printf ("\n");

            break;

        case 'b':
            for (i=0; i<10; i++)
            {
                lugar=0;
                for (j=0; j<10; j++)
                {
                    comparar=strcmp(nom[i],nom[j]);
                    if (comparar>0)
                    {
                        lugar++;
                    }
                }
                while (strcmp(nom[i],nomord[lugar])==0)
                {
                    lugar++;
                }
                sprintf (nomord[lugar],"%s%s",nom[i],"\0");
            }

            for (i=0; i<10; i++)
            {
                printf ("%d - %s\n",i+1,nomord[i]);
            }
            break;
        }

        printf ("Elige una opcion: ");
        scanf ("%s",&opcion); //Lee una opcion; si se elige la "s" se sale del programa
    }

    return 0;
}



Al compilarlo y ejecutarlo, en pantalla siempre me muestra bien los 10 nombres, pero al elegir después la opción de ordenarlos me empalma los nombres y me muestra cadenas de hasta más de 50 caracteres, con varios nombres pegados uno tras otro.
¿Alguna ayuda al respecto? ¿A qué podría deberse eso y cómo lo corrijo?