'How do you pass a struct pointer through a function?
#define WIDTH_DATA 20
typedef struct
{
float inhalt;
unsigned int nr;
int status;
} Paket;
typedef struct
{
Paket Eingang[WIDTH_DATA];
int laenge;
float Ablage_A[WIDTH_DATA];
float Ablage_B[WIDTH_DATA];
} Data_t;
#include <stdio.h>
int pruefe_status(int i1)
{
if (i1==0)
{
return 0;
}
else
{
return 1;
}
}
int vergleiche(unsigned int i1, unsigned int i2)
{
if (i1<i2)
{
return 1;
}
else
{
return 0;
}
}
int verteile_Pakete(Data_t *dv){
int counterA=0,counterB=0;
for (int i=0; i<WIDTH_DATA; i++)
{
if (pruefe_status(dv->Eingang[i].status)==0)
{
if(vergleiche(dv->Eingang[i].nr,5000))
{
dv->Ablage_A[counterA] = dv->Eingang[i].inhalt;
counterA++;
}
else{
dv->Ablage_B[counterB] = dv->Eingang[i].inhalt;
counterB++;
}
}
}
return counterB + counterA;
}
int main(void)
{
// Beispiel für testdv1:
Data_t testdv1 = {{{12.5, 6067, 1}, {45.7, 3002, 0}, {56.0, 3456, 1}}, 3, {0}, {0}};
Data_t testdv2 = {{{12.5, 6067, 0}, {45.7, 3002, 1}, {56.0, 3456, 1}}, 3, {0}, {0}};
Data_t testdv3 = {{{12.5, 6067, 0}, {45.7, 7002, 0}, {56.0, 6456, 0}, {13.5, 6067, 0}, {1.7, 7772, 0}, {156.0, 5656, 0}}, 6, {0}, {0}};
int Anzahl_pakete1=0;
int Anzahl_pakete2=0;
int Anzahl_pakete3=0;
Anzahl_pakete1 = verteile_Pakete(&testdv1);
Anzahl_pakete2 = verteile_Pakete(&testdv2);
Anzahl_pakete3 = verteile_Pakete(&testdv3);
printf("test 1:\nAnzahl bearbeitenden Pakete:%f\n",Anzahl_pakete1);
for (int i=0;i<10;i++)
{
printf("AblageA %d: %f\nAblageB %d: %f\n",i,testdv1.Ablage_A[i],i,testdv1.Ablage_B[i]);
}
printf("test 2:\nAnzahl bearbeitenden Pakete:%f\n",Anzahl_pakete2);
for (int i=0;i<10;i++)
{
printf("AblageA %d: %f\nAblageB %d: %f\n",i,testdv2.Ablage_A[i],i,testdv2.Ablage_B[i]);
}
printf("test 3:\nAnzahl bearbeitenden Pakete:%f\n",Anzahl_pakete3);
for (int i=0;i<10;i++)
{
printf("AblageA %d: %f\nAblageB %d: %f\n",i,testdv3.Ablage_A[i],i,testdv3.Ablage_B[i]);
}
return(0);
}
Why is the data in testdv1 or 2 or 3 not going in the function verteile_Pakete?.
I tried to pass the address of these test variables to the function as a pointer but the values get lost and don't get through when I try to debug. So everything comes out as 0.
How can I solve this?
Solution 1:[1]
When you look at the compiler output (https://godbolt.org/z/jM43PY916) it warns you that you try to output the integer count as float.
Replace %f with %d in your format strings for integers and it works.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Zaiborg |
