Buenas noches.
En mi clase de programación estructurada me encargaron que hiciera un programa que me generara 10 nombres con apellidos y, 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. Cuando me las genera al azar me las muestra correctamente, pero al seleccionar la opción de que me ordene la misma lista alfabéticamente me escribe cadenas muy largas repitiendo los nombres o me deja algunas vacías. Ya llevo varios días tratando de ver dónde podría estar mal, pero no logro dar con lo que debo cambiar.
El programa lo hice así:
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?
En mi clase de programación estructurada me encargaron que hiciera un programa que me generara 10 nombres con apellidos y, 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. Cuando me las genera al azar me las muestra correctamente, pero al seleccionar la opción de que me ordene la misma lista alfabéticamente me escribe cadenas muy largas repitiendo los nombres o me deja algunas vacías. Ya llevo varios días 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?