Estoy confundido sobre el comportamiento de scanf en el siguiente programa. scanf parece ingresar una vez y luego no volver a ingresar, hasta que se imprima una secuencia de caracteres.¿Por qué aparece Scanf para omitir la entrada?
continuación en un programa de C
#include<stdio.h>
int main()
{
int i, j=0;
do
{
++j;
scanf("%d", &i);
printf("\n\n%d %d\n\n", i, j);
}
while((i!=8) && (j<10));
printf("\nJ = %d\n", j);
return 0;
}
aquí, hasta que estoy introduciendo cualquier programa entero funciona perfectamente bien, pero cuando se introduce un personaje que va sobre la impresión del último valor inputed de i y nunca se detiene (hasta el j es 10 cuando el ciclo sale) para que scanf tome la siguiente entrada.
output::
1 <-----1st input
1 1
2 <---- 2nd input
2 2
a <---- character input
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
J = 10
same thing is happening in C++ also.
#include<iostream>
using namespace std;
int main()
{
int i, j=0;
do
{
++j;
cin>>i;
cout<<i<<" "<<j<<"\n";
}
while((i!=8) && (j<10));
cout<<"\nj = "<<j<<"\n";
}
output of c++ program ::
1 <-----1st input
1 1
2 <-----2nd input
2 2
a <------ character input
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
j = 10
único cambio en C++ es que 0 se está imprimiendo en lugar del último valor.
Lo sé aquí, el programa espera valores enteros, pero quiero saber qué sucede cuando se ingresa el carácter en lugar de un número entero. ¿Cuál es el motivo de todo lo que sucede arriba?
Esto podría ayudarlo: http://www.parashift.com/c++faq-lite/input-output.html#faq-15.3. La siguiente respuesta explica un poco más en el fondo también. – chris
posible duplicado de [scanf() portándose mal] (http://stackoverflow.com/questions/5062646/scanf-misbehaving) –