Autor
|
Tema: Problema con cadena de caracteres en C. (Leído 4,351 veces)
|
GilbertoBrewer
Desconectado
Mensajes: 10
|
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í: #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í: Jorge FoxValdez Pedro Valdez Jorge Luis PerezRojas
y no tengo idea de por qué pueda ser. También intenté escribiendo: strcpy(tipo,nombre); strcat(tipo," "); strcat(tipo,apellido[g]); en lugar de: 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
Mensajes: 1.314
|
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;: 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
Mensajes: 10
|
Ah, ok. Sí, ya vi el problema con la cita. El código es así: #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: strcpy(tipo,nombre)[i]; strcat(tipo," "); strcat(tipo,apellido[g]); en lugar de: sprintf(tipo,"%s %s",nombre[i],apellido[g]); En ambos casos me muestra en la pantalla algo así: Jorge FoxValdez Pedro Valdez Jorge Luis PerezRojas
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El programa debe funcionar correctamente si agregas al principio de este las directivas de inclusión: #include <stdlib.h> /* srand y rand */ #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
Mensajes: 1.314
|
También intenté escribiendo: strcpy(tipo,nombre) [ i ]; strcat(tipo," "); strcat(tipo,apellido[g]); en lugar de: 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: 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
Mensajes: 10
|
Ya corregí los errores y ya funcionó el programa. Muchas gracias por las observaciones.
|
|
|
En línea
|
|
|
|
ShadowA7X
Desconectado
Mensajes: 19
|
Recomendación personal amigo. Siempre cuando estés leyendo muchas cadenas de caracteres ocupa
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í ). 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
Mensajes: 1.639
|
Recomendación personal amigo. Siempre cuando estés leyendo muchas cadenas de caracteres ocupa
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
Mensajes: 10
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda!!! Problema con cadena de caracteres
Programación C/C++
|
mathias_vg
|
5
|
3,946
|
26 Junio 2013, 19:47 pm
por leosansan
|
|
|
[Solucionado] [JS] Problema de codificación al enviar cadena con caracteres
Scripting
|
Car0nte
|
0
|
1,820
|
17 Abril 2014, 20:54 pm
por Car0nte
|
|
|
Problema pegar caracteres en cadena.
Programación C/C++
|
Kaxperday
|
1
|
1,493
|
15 Febrero 2015, 21:15 pm
por engel lex
|
|
|
Duda sobre problema de cadena de caracteres.
Programación C/C++
|
rafacg96
|
1
|
1,459
|
2 Diciembre 2015, 07:11 am
por class_OpenGL
|
|
|
Problema con cadena de caracteres y estructura (Novato)
Programación C/C++
|
alejandrodiaz
|
3
|
1,622
|
18 Enero 2016, 00:25 am
por lfgmespino
|
|