Chicos, otra duda!
Para el siguiente código:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int x;
char y;
scanf("%d %c", &x, &y);
printf("%d\n",x );
printf("%c\n",y );
return 0;
}
Al colocar como entrada 5 4, lo que sucede es que muestra lo siguiente:
5
4
Pero al colocar la entrada 5c, muestra
5
c
¿Cómo es que sucede eso?
Pensé que solo al dejar espacio entre entradas o colocar una entrada, dar enter y colocar la segunda y dar enter, se leen dos entradas por separado. Pero en este úlitmo caso, con un solo enter, el programa considera que son dos entradas distintas (5 y c), por más que yo haya escrito una (5c). Algo se me está pasando por alto. -.-
Lo que pasa que en tu codigo primero intentara leer un entero y luego un caracter
supongamoss que pones 5c
buen el programa primero leera el primer entero que se encuentre, entonces mira y ve que hay un cinco pero se percata que despues del 5 hay un valor que no es un entero entonces da por entedido que tiene que leer hasta ahi
entonces ese 5 se almacena en la variable x
despues de guardar el primer valor, la funcion scanf nos indica que tambien va a leer un caracter entonces encuentra que 'c' es char valido entonces ahi para despues guardar el valor en la variable [Y] y mostar los resultados
intenta poniendo por consola 5cx y veras que te muestra el 5 y c
en cambio si pones 55C te mostrar 55 y C
digamos que el lenguaje intentar leer lo que ha especificado en la funcion scanf si tu le dices que primero leerá un entero y luego un char intetara encontrar los valores que se adapte a lo que les estas pidiendo en el scanf
es por eso que si lo pones pegado primero toma el int y despues el char.
Hola crack81.
Efectivamente he probado con tus ejemplos y obtuve los resultados que comentaste. Ahora una pequeña duda. Si yo ingreso la entrada 44 c y doy enter. (Observar que hay un espacio entre medio). El programa me muestra por pantalla:
44
c
Ahora, qué sucede con el espacio que dejo entre medio. Por qué ese espacio no es leido como un caracter? En todo caso se podría mostrar por pantalla sólo 44 y abajo un espacio en blanco que no se vería. ¿Sabes a qué se debe esto?
Porque scanf lee hasta que encuentra un espacio en blanco :xD Pero como tu le has indicado que busque un caracter despues el entero lo busca.
Prueba a hacer esto:
char buffer[10];
scanf("%s",&buffer);
printf("%s\n",buffer);
E introduce un texto como "Hola soy fary". Vas a ver que solo te imprime "Hola".
saludos.