Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mathias_vg en 26 Junio 2013, 16:30 pm



Título: Ayuda!!! Problema con cadena de caracteres
Publicado por: mathias_vg en 26 Junio 2013, 16:30 pm
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. }


Título: Re: Ayuda!!! Problema con cadena de caracteres
Publicado por: BlackZeroX en 26 Junio 2013, 16:54 pm
Mira esto:

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

Dulces Lunas!¡.


Título: Re: Ayuda!!! Problema con cadena de caracteres
Publicado por: eferion en 26 Junio 2013, 16:58 pm
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.


Título: Re: Ayuda!!! Problema con cadena de caracteres
Publicado por: mathias_vg en 26 Junio 2013, 18:48 pm
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. }


Título: Re: Ayuda!!! Problema con cadena de caracteres
Publicado por: ecfisa en 26 Junio 2013, 19:38 pm
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 :)


Título: Re: Ayuda!!! Problema con cadena de caracteres
Publicado por: leosansan en 26 Junio 2013, 19:47 pm
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!
   
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)