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

Posted

技术标签:

【中文标题】为啥我的答案是 0.00.. 混淆如何将 int 转换为 float struct【英文标题】:Why my answer is 0.00.. confuse how to convert int to float struct为什么我的答案是 0.00.. 混淆如何将 int 转换为 float struct 【发布时间】:2018-10-31 08:01:48 【问题描述】:

这些变量有问题。 有人可以解决这个问题吗?我的答案一直在 0.00

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

输出应该是: //*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]);
   

【问题讨论】:

获取现代编译器并阅读它对rata2 函数的说明。 rata2的参数类型是什么? (启用警告/错误并阅读它们..) 1.给rata2中的参数类型。 2、修复22((in1+...语法错误。 3. main 的签名是int main(void)。 4. 使用scanf 读取float 时使用%f,而不是%d。 5. 用%c 打印chars,而不是%f gcc -Wall -Wextra -Werror -std=c11 不应该再编译了! 【参考方案1】:

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

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

    char hasil[100] 将 hasil 分配为大小为 100 的 char 数组。虽然可以为 char 分配数值,但如果是,它们将被视为整数。浮点数 =/= 整数,这应该通过说 float hasil[100] 来纠正

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

    输入rata2 未指定。是整数吗?浮动?字符?它不知道,但它尝试使用整数,因为 C 中的大多数东西都可以用数字表示。由于它采用整数,因此您的计算返回的值也是一个整数,并且没有后期转换为浮点数会改变这一点。这些变量需要指定为 something 并且您如何处理错误 2 决定了您在此处执行的操作。如果您将较早的 scanf 更改为采用浮点数而不是数字,请将 rata 重写为 float rata2(float in1, float in2, float in3),删除演员表,您就完成了。如果你保持原样,将rata重写为float rata2(int in1, int in2, int in3),并将return重写为return ((float)in1 + (float)in2 + (float)in3)/3;。任何一种做法都是可以接受的,但是将它们指定为浮点数然后尝试投射所有内容(加上它的很多清洁剂)更容易和更快。

这应该可以纠正您的代码(在我的机器上测试过)。另外,为了以后的注意,做

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

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

【讨论】:

浮点数在内存方面的处理方式与整数和字符不同吗?

以上是关于为啥我的答案是 0.00.. 混淆如何将 int 转换为 float struct的主要内容,如果未能解决你的问题,请参考以下文章

Java短路混淆

c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?

为啥表单标签会与我的 ngModel 和属性绑定混淆? ngModel 在 ngFor 里面 Form 标签

为啥同位素会混淆点击 iFrame?

混淆 C++ 中的 & 和 *

为啥我的工具输出会覆盖自身,我该如何解决?