Почему scanf появляется, чтобы пропустить ввод?

Я запутался в поведении scanf в следующей программе. scanf вводится один раз, а затем не вводится снова, пока не будет напечатан поток символов.

Ниже в программе на Си

#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;
}

здесь, пока я не введу любую целочисленную программу, она работает отлично, но когда вводится символ, он продолжает печатать последнее введенное значение i и никогда не останавливается (до тех пор, пока 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  

то же самое происходит и в с ++.

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

Я знаю, что целочисленные значения ожидаются программой, но я хочу знать, что происходит, когда символ вводится вместо целого числа? в чем причина всего происходящего выше?

Ответы на вопрос(7)

Ваш ответ на вопрос