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!
#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]);
}
}
Mira esto:
http://gpraveenkumar.wordpress.com/2009/06/10/how-to-use-scanf-to-read-string-with-space/
Dulces Lunas!¡.
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.
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
#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]);
}
}
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 :)
O aún más sencillo en este caso, deja un espacio delante del segundo scanf:
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:
printf("%s",arre);
Saluditos!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)