为什么scanf不读取int的缓冲输入?

为什么scanf不读取int的缓冲输入?,c,scanf,C,Scanf,案例一 #包括 int main(){ 字符c; int i; scanf(“%c”、&c); scanf(“%d”、&i); printf(“%d”,i); } 输入:a 23 产出:23 案例二 #include<stdio.h> int main(){ char c; int i; scanf("%c",&c); scanf("%d",&i); printf("%d",i); } Input:a 23

案例一

#包括
int main(){
字符c;
int i;
scanf(“%c”、&c);
scanf(“%d”、&i);
printf(“%d”,i);
}
输入:a
23
产出:23
案例二

#include<stdio.h>
int main(){

    char c;
    int i;
    scanf("%c",&c);

    scanf("%d",&i);
    printf("%d",i);
}

Input:a
      23

Output:23
#包括
int main(){
字符c;
int i;
scanf(“%c”、&c);
printf(“%c”,c);
scanf(“%c”、&c);
printf(“%c”,c);
}
输入:a
产出:a
为什么在案例II中只需要一个输入,而在案例I中需要两个输入

如果在案例II中读取缓冲字符,为什么在案例I中不会发生相同的事情?
scanf(“%c”,&c)
读取字符(可能会失败;请仔细阅读)

scanf(“%d”,&i)
读取整数(可能会失败)

什么是角色?“a”是一个字符,但像换行符这样的空白字符也是。 在终端输入中输入a并按enter键时,将向缓冲输入发送a和换行符。第一个scanf将读取a,第二个scanf将读取换行符


当您执行
scanf(“%c”和&c)时;scanf(“%d”、&i)您确实应该测试结果的项目计数
#include<stdio.h>
int main(){
    char c;
    int i;
    scanf("%c",&c);
    printf("%c",c);

    scanf("%c",&c);
    printf("%c",c);
}

Input:a
OutPut:a