I need help with the following problem:
Given an array arr
of structs
typedef struct
{
char name[20];
float amount,price;
}product;
Print the longest subarray of elements from array arr
such that the arr
element has greater or equal price
than some value
which is read.
Function to check if element has greater or equal price
than a value
is given as an argument of a function void subarray(product *arr,int n,int (*check)(product * ,float ),
product *newArr,int *len_newArr,float value)
where newArr
is the output subarray.
Here is my code:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char name[20];
float amount,price;
}product;
void subarray(product *arr,int n,int (*check)(product * ,float ),
product *newArr,int *len_newArr,float value)
{
len_newArr=0;
int *current_len;
current_len=0;
int i;
for(i=0;i<n;i++)
{
//if condition is true, increment current length of newArr
//and store that element to newArr
if((*check)(arr+i,value))
{
current_len++;
newArr[i]=arr[i];
}
else
//begin with the next subarray
current_len=1;
//update newArr length
if(current_len > len_newArr)
len_newArr=current_len;
}
newArr=calloc(*len_newArr , sizeof(product));
//print the subarray
for(i=0;i<len_newArr;i++)
printf("%-19s %6.2f %6.2f\n",newArr[i].name,newArr[i].amount,newArr[i].price);
}
int check(product *pr,float value)
{
if(pr->price >= value)
return 1;
return 0;
}
void inputProduct(product *pr)
{
printf("name: ");
scanf("%s",pr->name);
printf("amount: ");
scanf("%f",&pr->amount);
printf("price: ");
scanf("%f",&pr->price);
}
int main()
{
int n,i;
product *arr,*newArr;
int len_newArr;
float value;
do
{
printf("n = ");
scanf("%d",&n);
}
while(n<1);
arr=malloc(n * sizeof(product));
newArr=calloc(n,sizeof(product));
for(i=0;i<n;i++)
{
printf("%d. product: \n",i+1);
inputProduct(arr+i);
}
printf("value: ");
scanf("%f",&value);
subarray(arr,n,&check,newArr,&len_newArr,value);
return 0;
}
The program gives warnings assignment makes pointer from integer without a cast
at line
//begin with the next subarray
current_len=1;
and comparison between pointer and integer
at line
//print the subarray
for(i=0;i<len_newArr;i++)
printf("%-19s %6.2f %6.2f\n",newArr[i].name,newArr[i].amount,newArr[i].price);