【问题标题】:Unexpected results on casting betwen int and double在 int 和 double 之间转换的意外结果
【发布时间】:2014-12-12 04:16:16
【问题描述】:

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

#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 的数据类型从 integer 更改为 double,其余代码保持不变,我执行了程序,但现在代码将平均值输出为 0,并且所有中间 temp 值都被评估为零。

#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);
}

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

【问题讨论】:

  • 评估为 0 是否意味着 printf 将显示 0?如果是,那是因为您使用的是 %d 而不是 %f。

标签: c


【解决方案1】:

我认为它的计算结果是加倍,但由于您正在使用 printf "%d" 掩码,它会打印一个 int。请改用“%f”。

【讨论】:

  • 别担心,我们都会犯错。如果我建议的更正有效,请确保将其标记为正确答案:)
  • 您可以在此处找到支持的格式字符串表:en.cppreference.com/w/cpp/io/c/fprintf
【解决方案2】:

为了打印双精度,您应该使用%lf,而您使用的是%d,它会打印结果的整数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2012-09-03
    • 2015-04-24
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多