scanf

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a, b, c, age;
    float scores;
    scanf("a=%d,b=%d,c=%d", &a, &b, &c);
    printf("a+b+c=%d\n\n", (a+b+c));
    //fflush(stdin);  // 清空缓冲区
    scanf("Tom's age is %d, his scores is %f.", &age, &scores);
    printf("age=%d, scores=%f.\n", age, scores);
    system("pause");
    return 0;
}
/*在内存中,有一块区域(比如512字节)专门用来保存用户输入的数据,遇到 scanf 时,程序会首先检查该区域是否有数据:
如果没有,就等待用户输入,用户从键盘输入的每个字符都会暂时保存到这里,直到按下回车键,输入结束,scanf 
再从这里读取数据,赋值给变量。
如果有数据,哪怕是一个字符,scanf 也会直接读取,不会等待用户输入。

这块内存区域,就叫做缓冲区(Buffer),或者缓存(Cache);又因为它是用来暂存用户输入的数据的,所以又叫输入缓
冲区。
缓冲区与普通的内存没有什么两样,都是物理内存上的若干字节,只是作用不同而已。
上面的代码如果没有fflush(stdin);,运行时就会大有不同:
a=23,b=900,c=399↙
a+b+c=1322

age=4239360, scores=0.000000.
第一次输入后,程序并没有等待我们第二次输入,age 和 scores 都是无效值。这是因为,第一次输入的数据为a=23,
b=900,c=399↙(包含最后的回车),回车后 scanf 读取到的数据是a=23,b=900,c=399,还有一个回车符留在缓冲区,
遇到第二个 scanf 时,因为缓冲区中有数据,所以会直接读取,不给我们输入的机会。

所以要用fflush(stdin);来清空缓冲区,这样遇到第二个 scanf 时因为缓冲区中没有数据,就会等待用户输入。 */ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值