Ayuda!!! Problema con cadena de caracteres

Iniciado por mathias_vg, 26 Junio 2013, 16:30 PM

0 Miembros y 1 Visitante están viendo este tema.

mathias_vg

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 (cpp) [Seleccionar]
#include <stdio.h>
#define tam_string 20

main()
{
char arre[tam_string];
int t;

for (t=0; t<=tam_string; t++)
    {
    arre[t]=32;
    }
   
printf("ingrese: ");
scanf("%s",arre);

    for(t=0; t<tam_string; t++)
        {
        printf("%c",arre[t]);
        }
   
}

BlackZeroX

The Dark Shadow is my passion.

eferion

#2
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...

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.

mathias_vg

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 (cpp) [Seleccionar]
#include <stdio.h>
#define tam_string 20
#define ced_string 22
main()
{
char arre[tam_string];
char arreglo[ced_string];
int t=0,j=0;


for (t=0; t<=tam_string; t++)
    {
    arre[t]=' ';
    }
        printf("Ingrese Nombre: ");
    scanf("%19[^\n]", arre);
    printf("Nombre ingresado: ");
    for (t=0;t<tam_string;t++)
    {
    printf("%c",arre[t]);
    }
   
   
    printf("\n");
   
   
       
    for (j=0; j<=ced_string; j++)
    {
    arreglo[j]=' ';
    }
    printf("Ingrese su cedula: ");
    scanf("%21[^\n]", arreglo);
    printf("Cedula ingresada: ");
    for (j=0;j<ced_string;j++)
    {
    printf("%c",arreglo[j]);
    }
}

ecfisa

Hola.

Agrega la siguiente línea a tu código:

    ...
    printf("Nombre ingresado: ");
    for (t=0;t<tam_string;t++)
    {
    printf("%c",arre[t]);
    }

    printf("\n");

    while(getchar() != '\n'); // <------ aqui
    ...


Saludos :)

leosansan

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

Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
printf("%s",arre);

Saluditos!