gcc中scanf的使用及返回值问题

来源:互联网 发布:php开源电商系统源码 编辑:程序博客网 时间:2024/05/19 12:28

今天在实现输入一组数字,以空格为间隔时对scanf的功能及返回值产生了疑问,所以自己实验了一下,现分享下实验结果

int main(){    int k, v;    k = scanf("%d", &v);    printf("k = %d\n", k);    printf("v = %d\n", v);}

直接输入空格回车都不会从scanf中返回(不知道还有没有其他符号有相同情况),会继续等待输入,而输入数字k = 1;输入字母字符k = 0,且v值无变化。

那么当输入不匹配时,缓冲区里的数据是否丢弃了呢?

int main(){    int i, k, v;    i = 0;    while(i < 2){        k = scanf("%d", &v);        printf("k = %d\n", k);        printf("v = %d\n", v);        i++;    }}

实验发现,不匹配的字符不会从缓冲区丢弃,而会继续匹配下一次输入。若想跳过缓冲区的字符,可以用scanf("%*c")匹配。

补充代码:输入一串数字,以空格(数量任意)间隔,可以过滤其他字符。

int main(){    int i, n, k, v, a[MAX];    char c;    i = 0;    while(1){        k = scanf("%d", &v);        c = getchar();        if(k == 1){            a[i] = v;            i ++;        }        else if(k == 0){            scanf("%*c");        }        if(c == '\n'){            break;          }    }    n = i;    for(i = 0; i < n; i++){        printf("%d ",a[i]);     }}