Dlaczego scanf wydaje się pomijać dane wejściowe?
Jestem zdezorientowany co do zachowania scanf w następującym programie. scanf pojawia się, aby wprowadzić raz, a następnie nie wprowadzać ponownie, dopóki nie zostanie wydrukowany strumień znaków.
Poniżej w programie 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;
}
tutaj, dopóki nie wprowadzę żadnego programu całkowitoliczbowego, będzie on działał idealnie, ale gdy zostanie wprowadzony znak, będzie on drukował ostatnią wprowadzoną wartość i i nigdy się nie zatrzyma (aż do j wynosi 10, gdy pętla wychodzi) dla scanf, aby wykonać następne wejście.
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
to samo dzieje się również w c ++.
#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
jedyna zmiana w c ++ polega na tym, że zamiast ostatniej wartości drukowane jest 0.
Wiem, że tutaj wartości całkowite są oczekiwane przez program, ale chcę wiedzieć, co się dzieje, gdy znak jest wprowadzany w miejsce liczby całkowitej? jaki jest powód tego wszystkiego, co dzieje się powyżej?