案例I
#include<stdio.h>
int main(){
char c;
int i;
scanf("%c",&c);
scanf("%d",&i);
printf("%d",i);
}
Input:a
23
Output:23
案例II
#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
为什么在II的情况下只需要一个输入,而如果我需要两个输入?
如果在案例II中读取缓冲字符,为什么在案例I中发生同样的事情呢?
答案 0 :(得分:1)
scanf("%c",&c)
读取字符(可能会失败;请仔细阅读scanf
)
scanf("%d",&i)
读取整数(可能会失败)
什么是角色?嗯,'a'是一个字符,但空行字符也是如此。 当您输入a并按Enter键进入终端输入时,您将向缓冲输入发送a和换行。第一个scanf将读取a,第二个scanf将读取换行符。
另一方面,当您scanf("%c",&c); scanf("%d",&i);
时,第一个scanf将读取'a'字符。第二个scanf将查找一个整数,但由于缓冲区中只有空格(换行符),它将跳过空格并等待一些可以解析的数字变为可用。