Я смущен о поведении scanf в следующей программе. scanf появляется для ввода один раз, а затем не вводится снова, пока не будет напечатан поток символов.Почему scanf, кажется, пропускает вход?
Ниже в программе 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;
}
здесь, пока я не вводя любое целое программа отлично работает, но когда персонаж вводится он идет на печать последнего занесены значения г и никогда не останавливается (недо j равно 10, когда цикл выходит) для scanf для ввода следующего ввода.
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
То же самое происходит в 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
Только изменение в C++ заключается в том, что вместо последнего значения печатается 0.
Я знаю, что здесь ожидаются целые значения, но я хочу знать, что происходит, когда символ вводится вместо целого числа? В чем причина всех происходящих выше?
Это может помочь вам: http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.3. Следующий ответ объясняет еще немного на фоне. – chris
Возможный дубликат [scanf() misbehaving] (http://stackoverflow.com/questions/5062646/scanf-misbehaving) –