scanf的注意点

来源:互联网 发布:速达软件数据库密码 编辑:程序博客网 时间:2024/04/30 08:38
scanf("%d%d%d\n",&a,&b,&c);sacnf("%d%d%d",&a,&b,&c);

那么加\n和不加\n有什么区别呢,我们用一个例子来说明一下:

#include <stdio.h>void main(){    int a,b,c;    char d;    scanf("%d,%d,%d\n",&a,&b,&c);//加了\n    //printf("%d%d%d\n",a,b,c);    scanf("%c",&d);    printf("%c",d);}***********************************************************#include <stdio.h>void main(){    int a,b,c;    char d;    scanf("%d,%d,%d",&a,&b,&c);//不加\n    //printf("%d%d%d\n",a,b,c);    scanf("%c",&d);    printf("%c",d);}

这里两段代码的区别仅是一个\n,第一个运行结果如下:
这里写图片描述
而第二个运行结果如下:
这里写图片描述
为什么第二个程序就直接结束了呢?
我们知道scanf是以输入缓冲区非空作为结束输入标志的,而在scanf的格式化字符串里面加入换行符则换行符不再被读入输入缓冲区,此时输入缓冲区内为空,需要再输入任意一个字符到输入缓冲区scanf才能结束。这样就可以解释了,第二个程序中scanf读取123后,把\n放入了输入缓冲区,而第二个scanf读取的就是输入缓冲区遗留的\n(注意这里仍没有换行符),再printf,程序就直接换行结束了。

0 0