为什么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)另一方面,第一次扫描将读取“a”字符。第二个scanf将查找整数,但由于缓冲区中只有空格(换行符)可用,因此它将跳过空格,等待可以解析为数字的内容可用。您确实应该测试结果的项目计数
#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