scanf

来源:互联网 发布:cs1.6 优化参数 编辑:程序博客网 时间:2024/06/06 11:48
#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=1322age=4239360, scores=0.000000.第一次输入后,程序并没有等待我们第二次输入,age 和 scores 都是无效值。这是因为,第一次输入的数据为a=23,b=900,c=399↙(包含最后的回车),回车后 scanf 读取到的数据是a=23,b=900,c=399,还有一个回车符留在缓冲区,遇到第二个 scanf 时,因为缓冲区中有数据,所以会直接读取,不给我们输入的机会。所以要用fflush(stdin);来清空缓冲区,这样遇到第二个 scanf 时因为缓冲区中没有数据,就会等待用户输入。 */ 

0 0
原创粉丝点击