elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda con cadenas de caracteres. en: 25 Noviembre 2014, 04:24 am
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í:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. main ()
  7. {
  8.    char nombre[15][10]={"Pedro","Paco","Perla","Paola","Jorge","Jesus","Maria","Jose","Elisa","Angel"};
  9.    char apellido[15][10]={"Perez","Lopez","Barba","Cruz","Robles","Gomez","Gaytan","Duval","Derbez","Padilla"};
  10.    char nom[30][10];
  11.    char nomord[30][10];
  12.    char opcion;
  13.    int a,b,i,j,lugar,comparar,largo[10];
  14.    srand (time (NULL));
  15.  
  16.    printf ("Escoge una opcion:\n");
  17.        printf ("a-Generar 10 nombres\n");
  18.        printf ("b-Ordenarlos alfabeticamente\n");
  19.        printf ("s-Salir\n");
  20.        scanf("%s",&opcion);
  21.  
  22.    while (opcion!='s')
  23.    {
  24.        switch (opcion)
  25.        {
  26.        case 'a':
  27.            printf ("\nNombres:\n");
  28.            for (i=0; i<10; i++)
  29.            {
  30.                a=rand()%10;
  31.                b=rand()%10;
  32.                sprintf (nom[i],"%s %s%s",nombre[a],apellido[b],"\0");
  33.                largo[i]=strlen(nom[i]);
  34.                printf ("%d- %s - %d\n",i+1,nom[i],largo[i]);
  35.            }
  36.            printf ("\n");
  37.  
  38.            break;
  39.  
  40.        case 'b':
  41.            for (i=0; i<10; i++)
  42.            {
  43.                lugar=0;
  44.                for (j=0; j<10; j++)
  45.                {
  46.                    comparar=strcmp(nom[i],nom[j]);
  47.                    if (comparar>0)
  48.                    {
  49.                        lugar++;
  50.                    }
  51.                }
  52.                while (strcmp(nom[i],nomord[lugar])==0)
  53.                {
  54.                    lugar++;
  55.                }
  56.                sprintf (nomord[lugar],"%s%s",nom[i],"\0");
  57.            }
  58.  
  59.            for (i=0; i<10; i++)
  60.            {
  61.                printf ("%d - %s\n",i+1,nomord[i]);
  62.            }
  63.            break;
  64.        }
  65.  
  66.        printf ("Elige una opcion: ");
  67.        scanf ("%s",&opcion); //Lee una opcion; si se elige la "s" se sale del programa
  68.    }
  69.  
  70.    return 0;
  71. }
  72.  
  73.  

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?
2  Programación / Programación C/C++ / Problema con cadena de caracteres en C. en: 26 Octubre 2014, 04:28 am
Buenas noches o lo que sea cuando entren al tema.

Estoy llevando un curso de programación estructurada y hemos estado trabajando en lenguaje C utilizando Code::Blocks.

Me encargaron un programa en el cual debería guardar 10 cadenas de caracteres en una variable "nombre" y otras 10 en una variable "apellido", para después generar diez combinaciones aleatorias de nombre y apellido, y me mostrara la lista en pantalla.

Yo lo hice así:
Citar
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main ()
{
    int p,i,g;
    char nombre[10][10]={"Pedro","Hugo","Oliver","Luis","Jesus","Natalia","Monserrat","Vanessa","Antonio","Jorge"};
    char apellido[10][10]={"Lopez","Perez","Rojas","Garcia","Martinez","Montes","Fox","Valdez","Diaz","Hidalgo"};
    char tipo[25];
    srand(time(NULL));

    for (p=0; p<10; p++)
    {
        i=rand()%10;
        g=rand()%10;
        sprintf(tipo,"%s %s",nombre,apellido[g]);
        puts(tipo);
    }

    return 0;
}

El problema está en que en algunos casos me imprime dos apellidos juntos o no me muestra el apellido, algo así:

Citar
Jorge FoxValdez
Pedro Valdez
Jorge
Luis PerezRojas

y no tengo idea de por qué pueda ser.

También intenté escribiendo:
Citar
strcpy(tipo,nombre);
        strcat(tipo," ");
        strcat(tipo,apellido[g]);
en lugar de:
Citar
sprintf(tipo,"%s %s",nombre,apellido[g]);
pero el resultado es algo similar.

¿Podrían ayudarme a encontrar el error de mi programa y/o recomendarme alguna forma de corregirlo o alguna manera alternativa de hacerlo?

De antemano, gracias.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines