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

时间:2017-11-22 17:16:33

标签: c scanf

案例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中发生同样的事情呢?

1 个答案:

答案 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将查找一个整数,但由于缓冲区中只有空格(换行符),它将跳过空格并等待一些可以解析的数字变为可用。