函数,该函数将int指针*作为参数并返回结构。在struct struct*中存储数据并打印结果

函数,该函数将int指针*作为参数并返回结构。在struct struct*中存储数据并打印结果,c,struct,C,Struct,我遇到了一个我认为不应该发生的问题: 下面是我得到的错误。 对不起,格式不好,记事本上的编码和cntr c&v编译器经常这样做 ~/workspace/Exam1 $ gcc -g payload.c -o payload payload.c: In function ‘main’: payload.c:63:31: warning: initialization from incompatible pointer type [enabled by default] struct pa

我遇到了一个我认为不应该发生的问题: 下面是我得到的错误。 对不起,格式不好,记事本上的编码和cntr c&v编译器经常这样做

~/workspace/Exam1 $ gcc -g payload.c -o payload
payload.c: In function ‘main’:
payload.c:63:31: warning: initialization from incompatible pointer type [enabled by default]
     struct payload* calcVal = getCalc(arr, num);
                               ^
payload.c:65:36: error: dereferencing pointer to incomplete type
     printf("OddSum : %d\n", calcVal->sumOdd);
                                    ^
payload.c:66:40: error: dereferencing pointer to incomplete type
     printf("Even Count : %d\n", calcVal->evenCount);
                                        ^
payload.c:67:37: error: dereferencing pointer to incomplete type
     printf("Minimum : %d\n", calcVal->min);
                                     ^
payload.c:68:37: error: dereferencing pointer to incomplete type
     printf("Maximum : %d\n", calcVal->max);
老实说,我不明白问题是什么,为什么我总是遇到这种情况。我传错了吗

#include<limits.h> //for min/max 
#include <stdio.h>
#include <stdlib.h>

struct payLoad{
    int sumOdd;
    int evenCount;
    int min;
    int max;
};

struct payLoad* getCalc(int *arr, int n){
    int i = 0;
    int min= INT_MAX;
    int max = INT_MIN;
    int sum = 0;
    int even = 0;
    struct payLoad* calcVal = malloc(sizeof(struct payLoad));  //watch spelling


    for(i=0;i <n;++i){
        if(arr[i]%2==0){
            ++even;
        }
        if (arr[i] < min){
            min = arr[i];
        }
    }

    if (arr[i] > max){
        max = arr[i];
    }
    if(arr[i]%2==1){
        sum = sum + arr[i];
    }

    calcVal->sumOdd = sum;
    calcVal->evenCount = even;
    calcVal->max = max;
    calcVal->min = min;

    return calcVal;

}

int main(){

    int num; 
    int i=0; 
    //int min= INT_MAX:
    //int max = INT_MIN: 
    int sum = 0;

    printf("Enter the number of array element: ");
    scanf("%d", &num);
    int *arr = (int *)malloc(num*sizeof(int));

    for(i=0;i <num;++i){
        printf("Enter the value: ");
        scanf("%d", &arr[i]);
    }

    struct payload* calcVal = getCalc(arr, num);

    printf("OddSum : %d\n", calcVal->sumOdd);
    printf("Even Count : %d\n", calcVal->evenCount);
    printf("Minimum : %d\n", calcVal->min);
    printf("Maximum : %d\n", calcVal->max);
}

编辑:修复了打字错误和拼写错误、删除了链接、cntr c&v错误

您的程序出现了多个打字错误,就像您在几个地方遇到的一样:

struct payload
          ^ 
有效载荷应为有效载荷

在这里:

你忘了放{。它应该是:

if(arr[i]%2==1) {
    sum = sum + arr[i];
}
大体上:

相反,它应该是

大体上:

查看struct负载声明,您会发现它有一个成员sumOdd,而不是oddSum

编译器必须将所有这些报告为错误。仔细查看它们,尝试找出原因,修复它,然后重新构建它


无论您动态分配的内存是什么,您都应该释放它。一旦程序终止,它拥有的内存将自动释放,但作为一种良好的编程实践,您应该在完成后显式地释放动态分配的内存。

sizeofstruct payload->sizeofstruct payload spelling。有什么问题吗你面对的是什么?要清楚。请不要发布代码和输出的图片,复制并粘贴到这里,就像你在第一个地方一样。错误表明它无法解析文件,你的代码中有一些拼写错误。coderredoc指出了这些错误。你的代码格式非常糟糕,其中一些错误如缺少{如果您正确缩进代码,则if之后的效果会很明显。我修复了代码中的缩进,现在您又弄坏了。@Pablo,对不起。这里看起来更好?替换屏幕截图并修复拼写和错误typos@WadeWilson:你做了我在回答中建议的更改了吗?我想出来了。谢谢
if(arr[i]%2==1) {
    sum = sum + arr[i];
}
int num,
printf("OddSum : %d\n", calcVal->oddSum);