在int和double之间进行转换时出现意外结果

时间:2014-12-12 04:16:16

标签: c

我正在查看一个示例代码,其中涉及打印出整数数据类型的少数数字的平均值。代码是:

#include<stdio.h>

double getavg(int a[],int size){
    int temp=0;
    for(int i=0;i<size;i++){
        temp+=a[i];
        //checking intermediate temp
        printf("%d ",temp); 
    }
    return (temp/size);
}

int main(){
    int arr[5]={1,2,3,4,5};

    for(int i=0;i<5;i++)
        printf("%d ",arr[i]);
    printf("\n");
    int avg=getavg(arr,5);
    printf("\n");
    printf("Average is %d",avg);
}

我尝试将temp的数据类型从整数更改为double,其余代码保持不变,我执行了程序,但现在代码输出平均值为0,并且所有中间临时值都被评估为零。

#include<stdio.h>

double getavg(int a[],int size){
    double temp=0;
    for(int i=0;i<size;i++){
        temp+=a[i];
        //checking intermediate temp
        printf("%d ",temp); 
    }
    return (temp/size);
}

任何人都可以清楚这个吗?

2 个答案:

答案 0 :(得分:3)

我认为由于您使用的printf“%d”蒙版,它会计算加倍但会打印一个int。请改用“%f”。

答案 1 :(得分:0)

为了打印双倍,您应该使用%lf并使用%d来打印结果的整数值。