Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的答案是0.00。。混淆如何将int转换为float结构_C_Variables_For Loop_Struct_Mean - Fatal编程技术网

C 为什么我的答案是0.00。。混淆如何将int转换为float结构

C 为什么我的答案是0.00。。混淆如何将int转换为float结构,c,variables,for-loop,struct,mean,C,Variables,For Loop,Struct,Mean,这些变量有点不对劲。 有人能解决这个问题吗?我的答案一直是0.00 测试用例: 我们想用struct找出3个数字之间的平均值 输入=2, 其中两个是:358和357 输出应为: //*3+5+8=(16)/3=5.33 //*3+5+7=(15)/3=5.00 #包括 结构拉塔{ 浮于1; 浮动in2; 浮动3; }; 浮动rata2(in1、in2、in3){ 返回(浮动)((in1+in2+in3)/3); } void main(){ inti,n; char-hasil[100]; sc

这些变量有点不对劲。 有人能解决这个问题吗?我的答案一直是0.00

测试用例: 我们想用struct找出3个数字之间的平均值 输入=2, 其中两个是:358和357

输出应为: //*3+5+8=(16)/3=5.33 //*3+5+7=(15)/3=5.00

#包括
结构拉塔{
浮于1;
浮动in2;
浮动3;
};
浮动rata2(in1、in2、in3){
返回(浮动)((in1+in2+in3)/3);
}
void main(){
inti,n;
char-hasil[100];
scanf(“%d”和“&n”);
拉塔瓦劳结构;

对于(i=0;i,代码中有3个错误阻止您获得正确答案。您能找到它们吗?这里有一个提示,它们与类型有关

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

  • char hasil[100]
    将hasil指定为大小为100的字符数组。虽然可以为字符指定数值,但如果它们是。Floats=/=整数,则应将其视为整数,并应通过说
    float hasil[100]

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

  • rata2
  • 的输入是未指定的。它是int?floats?chars?它不知道,但它尝试使用int,因为C中的大部分内容都可以用数字表示。由于它使用int,因此计算返回的值也是int,并且没有对float的后期转换会改变这一点。这些变量需要指定为某物以及您处理错误2的方式决定了您在此处的操作。如果您将先前的扫描更改为采用浮点而不是数字,请将rata重写为
    float rata2(float in1,float in2,float in3)
    ,删除强制转换,即可完成操作。如果保持原样,请将rata重写为
    float rata2(int in1,int in2,int in3)
    ,并将返回重写为
    返回((float)in1+(float)in2+(float)in3)/3;
    。这两种方法都是可以接受的,但将它们指定为float比尝试强制转换所有内容(加上更干净)更容易、更快

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

    scanf(“%d”和&n);float hasil[n];


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

    使用现代编译器,阅读它对
    rata2
    函数的说明。
    rata2
    的参数类型是什么?(启用警告/错误并读取它们…)1.为
    rata2
    中的参数指定类型。2.修复不正确的
    22((in1+…
    语法)。3.main的签名是
    int main(void)
    .4.使用
    scanf
    读取
    float
    时,使用
    %f
    ,而不是
    %d
    .5.使用
    %c
    打印
    char
    %f不应该再编译了!float与int和chars在内存方面不一样正确吗?
    #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]);
       }
    }