consulta: leer 1 int y un char en una sola sentencia y mostrarlos por separados

Iniciado por etcheverrypablol, 19 Enero 2016, 03:39 AM

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

etcheverrypablol

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






crack81

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.
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

etcheverrypablol

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?

fary

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.
Un byte a la izquierda.