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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con cadena de caracteres en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con cadena de caracteres en C.  (Leído 3,867 veces)
GilbertoBrewer

Desconectado Desconectado

Mensajes: 10


Ver Perfil
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.


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #1 en: 26 Octubre 2014, 04:58 am »

Buenas noches o lo que sea cuando entren al tema.


El problema está en que en algunos casos me imprime dos apellidos juntos o no me muestra el apellido, ...............................


Supongo que has puesto;:

Código
  1. sprintf(tipo,"%s %s",nombre[i],apellido[g]);

Es que al usar Cita en lugar de las etiquetas GeSHi el código que cuelgas no sale bien,

¡¡¡¡ Saluditos! ..... !!!!





« Última modificación: 26 Octubre 2014, 06:19 am por leosansan » En línea

GilbertoBrewer

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #2 en: 26 Octubre 2014, 05:17 am »

Ah, ok. Sí, ya vi el problema con la cita.

El código es así:
Código:
#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[i],apellido[g]);
        puts(tipo);
    }

    return 0;
}

También intenté escribiendo:
Código:
        strcpy(tipo,nombre)[i];
        strcat(tipo," ");
        strcat(tipo,apellido[g]);
en lugar de:
Código:
        sprintf(tipo,"%s %s",nombre[i],apellido[g]);

En ambos casos me muestra en la pantalla algo así:
Código:
Jorge FoxValdez
Pedro Valdez
Jorge
Luis PerezRojas
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #3 en: 26 Octubre 2014, 06:24 am »

El programa debe funcionar correctamente si agregas al principio de este las directivas de inclusión:
Código
  1. #include <stdlib.h> /* srand y rand */
  2. #include <time.h>   /* time */

Y no es necesario que incluyas <string.h>, en cuanto a conio la deberías evitar por las razone que se indican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #4 en: 26 Octubre 2014, 06:29 am »


También intenté escribiendo:

Citar
strcpy(tipo,nombre)[ i ];
        strcat(tipo," ");
        strcat(tipo,apellido[g]);
en lugar de:
Código:
       sprintf(tipo,"%s %s",nombre[i],apellido[g]);


Antes que nada elige en las etiquetas GeSHi la de C++ para que el código salga coloreado.

El [ i ] se te fue fuera del paréntesis:

Código
  1. strcpy ( tipo , nombre [ i ] ) ;

Y si usas strcpy y strcat si debes incluir la librería <string.h>.

¡¡¡¡ Saluditos! ..... !!!!



« Última modificación: 26 Octubre 2014, 07:31 am por leosansan » En línea

GilbertoBrewer

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #5 en: 27 Octubre 2014, 23:10 pm »

Ya corregí los errores y ya funcionó el programa.

Muchas gracias por las observaciones. :)
En línea

ShadowA7X

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #6 en: 28 Octubre 2014, 00:03 am »

Recomendación personal amigo. Siempre cuando estés leyendo muchas cadenas de caracteres ocupa
Código
  1. fflush(stdin);

antes y/o despues de los scanf o los getch. Lo que hace esa función es limpiarte el buffer para que la próxima lectura no se vea afectada en ninguna medida por la lectura anterior. Siempre que quieras prevenir que algo malo pase con las lecturas de cadenas, ponlo (funciona como un parche por decirlo así  ;D). Si eso no lo soluciona entonces es un problema del código en si.


Eso, espero te sirva para afrontar futuros casos  :).
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #7 en: 28 Octubre 2014, 01:20 am »

Recomendación personal amigo. Siempre cuando estés leyendo muchas cadenas de caracteres ocupa
Código
  1. fflush(stdin);
El uso de fflush(stdin) no se recomienda, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
GilbertoBrewer

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #8 en: 28 Octubre 2014, 20:46 pm »

Sí había visto en ese tema que no es recomendable utilizar el fflush(stdin), pero no me quedó del todo claro el porqué.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con cadena de caracteres en C.
« Respuesta #9 en: 28 Octubre 2014, 20:48 pm »

Sí había visto en ese tema que no es recomendable utilizar el fflush(stdin), pero no me quedó del todo claro el porqué.
Porque la función fflush está definida para limpiar el estandar de salida (stdout), en cualquier otro caso el comportamiento de la función está indefinido. En Windows funciona, por el contrario en Linux no lo hace y Mac OS lo ignora.
En línea

Regístrate en
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines