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


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Ayuda!!! Problema con cadena de caracteres
« en: 26 Junio 2013, 16:30 »

Buenas que tal!!!
Les cuento realize un codigo para poder ingresar algunos datos pero cuando ingreso algo que tenga dos palabras separadas por un espacio solo me toma la primera, es decir no me toma el espacio como caracter. Necesito si me pueden ayudar a corregir el codigo, y asi poder imprimir dos palabras por un espacio.

Desde ya muchas gracias!


Código
  1. #include <stdio.h>
  2. #define tam_string 20
  3.  
  4. main()
  5. {
  6. char arre[tam_string];
  7. int t;
  8.  
  9. for (t=0; t<=tam_string; t++)
  10.    {
  11.     arre[t]=32;
  12.    }
  13.  
  14. printf("ingrese: ");
  15. scanf("%s",arre);
  16.  
  17.    for(t=0; t<tam_string; t++)
  18.        {
  19.         printf("%c",arre[t]);
  20.        }
  21.  
  22. }


En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.128


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda!!! Problema con cadena de caracteres
« Respuesta #1 en: 26 Junio 2013, 16:54 »

Mira esto:

http://gpraveenkumar.wordpress.com/2009/06/10/how-to-use-scanf-to-read-string-with-space/

Dulces Lunas!¡.


En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda!!! Problema con cadena de caracteres
« Respuesta #2 en: 26 Junio 2013, 16:58 »

la función scanf con el parámetro %s lee una cadena hasta que encuentra un hueco.

Se entiende por hueco un tabulador, un espacio en blanco, un salto de línea, ...

Una opción sería cambiar el argumento de scanf por otro tal que...

Código
  1. scanf("%19[^\n]", arre);

Con esto indicas que scanf recupere todos los caracteres que encuentre hasta que tope con un salto de línea o alcance el límite de 19 caracteres... recuerda que la última posición del array has de reservarla para el caracter nulo.

La solución que proponen arriba es igualmente válida pero ahí no se comprueba el tamaño del buffer... con lo que podrías tener problemas si al que prueba tu programa le da por meter un título de longitud superior a 19 caracteres.

Si quieres mas control sobre lo que estás copiando podrías mirar otras funciones, como fgets.

Un saludo.
« Última modificación: 26 Junio 2013, 17:41 por eferion » En línea

mathias_vg

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: Ayuda!!! Problema con cadena de caracteres
« Respuesta #3 en: 26 Junio 2013, 18:48 »

Muchas gracias por su pronta ayuda, ahora tengo lo siguiente, en el codigo que detallo a continuacion me deja ingresar el nombre pero no la cedula, alguien sabe porque es?

Saludos

Código
  1. #include <stdio.h>
  2. #define tam_string 20
  3. #define ced_string 22
  4. main()
  5. {
  6. char arre[tam_string];
  7. char arreglo[ced_string];
  8. int t=0,j=0;
  9.  
  10.  
  11. for (t=0; t<=tam_string; t++)
  12.     {
  13.     arre[t]=' ';
  14.     }
  15.        printf("Ingrese Nombre: ");
  16.     scanf("%19[^\n]", arre);
  17.     printf("Nombre ingresado: ");
  18.     for (t=0;t<tam_string;t++)
  19.     {
  20.     printf("%c",arre[t]);
  21.     }
  22.  
  23.  
  24.     printf("\n");
  25.  
  26.  
  27.  
  28.     for (j=0; j<=ced_string; j++)
  29.     {
  30.     arreglo[j]=' ';
  31.     }
  32.     printf("Ingrese su cedula: ");
  33.     scanf("%21[^\n]", arreglo);
  34.     printf("Cedula ingresada: ");
  35.     for (j=0;j<ced_string;j++)
  36.     {
  37.     printf("%c",arreglo[j]);
  38.     }
  39. }
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Ayuda!!! Problema con cadena de caracteres
« Respuesta #4 en: 26 Junio 2013, 19:38 »

Hola.

Agrega la siguiente línea a tu código:
Código
  1.    ...
  2.    printf("Nombre ingresado: ");
  3.    for (t=0;t<tam_string;t++)
  4.    {
  5.    printf("%c",arre[t]);
  6.    }
  7.  
  8.    printf("\n");
  9.  
  10.    while(getchar() != '\n'); // <------ aqui
  11.    ...
  12.  

Saludos :)
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda!!! Problema con cadena de caracteres
« Respuesta #5 en: 26 Junio 2013, 19:47 »

O  aún más sencillo en este caso, deja un espacio delante del segundo scanf:

Código
  1. scanf(" %21[^\n]", arreglo);

Por cierto, ¿te has fijado que inicializas hasta el último caracter con espacio vacío y no dejas "sitio" al final de cadena "\0"?.

¿Y por qué imprimes caracter a caracter en lugar de imprimir la cadena completa?. Algo como:


Código
  1. printf("%s",arre);

 Saluditos!
   
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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