函数,该函数将int指针*作为参数并返回结构。在struct struct*中存储数据并打印结果
我遇到了一个我认为不应该发生的问题: 下面是我得到的错误。 对不起,格式不好,记事本上的编码和cntr c&v编译器经常这样做函数,该函数将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
~/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);