Warum scheint scanf Eingaben zu überspringen?

Ich bin verwirrt über das Verhalten von scanf im folgenden Programm. scanf wird anscheinend einmal eingegeben und dann erst wieder, wenn ein Zeichenstrom gedruckt wird.

Unten in einem C-Programm

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

Bis ich ein ganzzahliges Programm eingebe, funktioniert dies einwandfrei, aber wenn ein Zeichen eingegeben wird, wird der zuletzt eingegebene Wert von i gedruckt und es wird niemals angehalten (bis j 10 ist, wenn die Schleife endet), damit scanf die nächste Eingabe übernimmt.

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  

Das Gleiche passiert auch in 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  

in c ++ ändert sich nur, dass 0 anstelle des letzten Wertes ausgegeben wird.

Ich weiß, dass hier ganzzahlige Werte vom Programm erwartet werden, aber ich möchte wissen, was passiert, wenn Zeichen anstelle einer ganzen Zahl eingegeben werden? Was ist der Grund, warum alles oben passiert?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage