为什么我的答案是0.00 ..混淆如何将int转换为float struct

时间:2018-05-21 16:06:55

标签: c variables for-loop struct mean

这些变量有问题。 有人能解决这个问题吗我的答案继续保持0.00

测试用例: 我们想用struct找到3个数字之间的平均值 输入= 2, 其中2个是:3 5 8和3 5 7

out put应该是: //*3+5+8=(16)/3=5.33 // * 3 + 5 + 7 =(15)/3=5.00

#include<stdio.h>

struct rata{
   float in1;
   float in2;
   float in3;
};

float rata2(in1,in2,in3){
   return (float)((in1+in2+in3)/3);
}

void main(){
   int i,n;
   char hasil[100];
   scanf("%d",&n);
   struct rata walao;
   for (i=0;i<n;i++){
      scanf("%d %d %d",&walao.in1,&walao.in2,&walao.in3);
      hasil[i]=rata2(walao.in1,walao.in2,walao.in3);
   }
   for (i=0;i<n;i++){
      printf("%.2f\n",hasil[i]);
   }
}

1 个答案:

答案 0 :(得分:0)

您的代码中有3个错误阻止您获得正确的答案。你能找到他们吗?这是一个提示,它们与类型有关。

以下是答案及其背后的原因。

  1.   

    char hasil[100]将hasil指定为大小为100的char数组。虽然可以为chars分配数值,但如果它们是,则将它们视为整数。 Floats = / =整数,这应该通过说float hasil[100]

    来纠正
  2.   

    scanf("%d %d %d",&walao.in1,&walao.in2,&walao.in3)正在扫描3个数字。由于浮点数也可以赋予整数值,因此这是有效的。但是,该语言要求计算中使用的所有值都应该是相同的类型(提示为3!)。要解决这个问题,你可以做两件事中的一件,两件都是合法的,但完全取决于你。您可以将其写为scanf("%f %f %f",&walao.in1,&walao.in2,&walao.in3)或保持原样。您的选择将在最终错误中发挥

  3.   

    输入rata2未指定。它是整数?浮动?字符?它不知道,但它试图使用整数,因为大多数C中的所有东西都可以用数字表示。由于它采用整数,因此计算返回的值也是一个int,并且没有后期转换为浮动将改变它。这些变量需要指定为某些,你如何处理错误2决定你在这里做什么。如果您更改了早期的scanf以获取浮点数而不是数字,请将rata重写为float rata2(float in1, float in2, float in3),删除强制转换然后您就完成了。如果保持原样,请将rata重写为float rata2(int in1, int in2, int in3),并将返回值重写为return ((float)in1 + (float)in2 + (float)in3)/3;。这两种行动方式都是可以接受的,但它更容易,更快速地将它们指定为花车,然后尝试施放所有物品(加上它的清洁剂)。

  4. 这应该纠正你的代码(在我的机器上测试它)。此外,为了将来的注意,请

      

    scanf("%d",&n);float hasil[n];

    它更有意义,您不必遇到人们指定您无权访问的内存的问题。