输入n个整数,求其中偶数平均值,并打印

int a,b,s=0,i=0;
while((b=scanf("%d",&a))!=0)
{
if(a%2==0){s+=a;i++;}
}
printf("%f\n",(float)s/i);
Printf("%d %d %d",b,s,i);
当输入小数时为非法输入,d为0,但为何I仍然加1?输出字符就会直接跳出,I不会再加1

与scanf函数有关,不是很完善的解释如下:


#include <stdio.h>

int main(void){

    int a,b,s=0,i=0;

    //scanf的返回值为成功读取的项数,如果要读取一个数字却输入一个非数值就会返回0//以上说明(参见C Primer Plus (第6版)中文版 第95页 --scanf()的返回值 )

    //按下面的代码就会退出。
    //因为scanf里面的%d是指示读取一个整数,(同上书 93页 表4.6 ANSI C中scanf()的转换说明 )
    
    //输入小数的情况,限于我所学,只查询和测试到这些信息,可以作为一个参考意见看待,不代表完全正确:
    //输入1.1  得到一个输出:-1.#IND00, 是表示结果无限小或无限大,把0作为了除数,
    //1.1未未读入变量a ,所以发生除0错误。    
    // 输入0.1,得到一个输出0.000000, 表示读入了一个数0,平均值也是0 
    
    //而输入0,是符合要求的,所以i会加1,
    
    //而输入字符,因为不是数值,所以scanf返回0,直接退出。 

    // (b=scanf("%d",&a))!=0 表示从输入不断读入整数,存放到变量a,
    //如果读入的数据不是整数(scanf就会返回0)就退出。 
    while((b=scanf("%d",&a))!=0)
    {
        if(a%2==0){s+=a;i++;}
    }
    printf("%f\n",(float)s/i);
    printf("%d %d %d",b,s,i);
    return 0;
}