为啥我的答案是 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
打印char
s,而不是%f
。
gcc -Wall -Wextra -Werror -std=c11
不应该再编译了!
【参考方案1】:
您的代码中有 3 个错误导致您无法获得正确答案。你能找到他们吗?这是一个提示,它们与类型有关。
以下是答案及其背后的原因。
char hasil[100]
将 hasil 分配为大小为 100 的 char 数组。虽然可以为 char 分配数值,但如果是,它们将被视为整数。浮点数 =/= 整数,这应该通过说float hasil[100]
来纠正
scanf("%d %d %d",&walao.in1,&walao.in2,&walao.in3)
正在扫描 3 个数字。由于浮点数也可以分配整数值,因此这是有效的。但是,该语言要求计算中使用的所有值都应该是相同的类型(提示 3!)。要解决此问题,您可以做 2 件事中的 1 件事,两者都是合法的,但完全取决于您。您可以将其写为scanf("%f %f %f",&walao.in1,&walao.in2,&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",&n);float hasil[n];
这更有意义,您不必遇到人们指定您无权访问的内存的问题。
【讨论】:
浮点数在内存方面的处理方式与整数和字符不同吗?以上是关于为啥我的答案是 0.00.. 混淆如何将 int 转换为 float struct的主要内容,如果未能解决你的问题,请参考以下文章
c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?