Home > database >  warning: implicit declaration of function 'bin'; warning: conflicting types for 'bin&
warning: implicit declaration of function 'bin'; warning: conflicting types for 'bin&

Time:10-09

I got this error for binary search program in c, although it asked me give inputs and printed the correct output.Below is the error I got in the output window.

  binarysearch.c: In function 'sort': binarysearch.c:22:5: warning:
  implicit declaration of function 'bin'
  [-Wimplicit-function-declaration]
       bin(a,size);//invokes bin(int,int) to find element
       ^~~ binarysearch.c: At top level: binarysearch.c:24:6: warning: conflicting types for 'bin'  void bin(int a[],int size)//finds element
  using binary sort technique and return its index
       ^~~ binarysearch.c:22:5: note: previous implicit declaration of 'bin' was here
       bin(a,size);//invokes bin(int,int) to find element
       ^~~
  Enter size of array:
  1. How do I resolve the error?
  2. What does the error mean?
  3. Why did it still ask for inputs when an error occurred?

I made 2 functions. First function that is void sort(int a[],int size) sorted the array using selection sort and printed it and invoked the second function, the function below that or the second function that is void bin(int a[],int size) used binary search to find an element and printed its position(index 1). Then I wrote the main function.

The program is:

#include<stdio.h>
void sort(int a[],int size)//sorts array in ascending order
{
    int min;
    for(int i=0;i<size;i  )
    {
        for(int j=0;j<size;j  )
        {
           if(a[j]>a[j 1])//checks if elements at position 'i' is greater than element at position (i 1) and exchanges values if true
           {
              min=a[j];
              a[j]=a[j 1];
              a[j 1]=min;
           }
        }
    }
    printf("Sorted array:");
    for(int i=0;i<size;i  )//prints sorted array
    {
        printf("%d  ",a[i]);
    }
    bin(a,size);//invokes bin(int,int) to find element
}
void bin(int a[],int size)//finds element using binary sort technique and return its index
{
    int key;//stores element to be found
    printf("\nEnter element to be found:");
    scanf("%d",&key);
    int sp=0;//stores starting point which is initially 0
    int ep=size-1;//stores ending point which is initially one less than size of array
    int mid;//stores average of sp and ep
    int count=0;//counter
    printf("Occurrence is:");
    while(sp<=ep)
    {
        mid=(sp ep)/2;
        if(a[mid]>key)//to run loop for elements that are before mid
        {
            ep=mid-1;
        }
        else if(a[mid]<key)//to run loop for elements that are after mid 
        {
            sp=mid 1;
        }
        else if(a[mid]==key)//when element is found
        {
            printf("%d",mid 1);
            count =1;
            break;//to stop the loop
        }
    }
    if(count==0)//in case element is not found
    printf("ELEMENT NOT FOUND");
}
    int main()
    {
        int n;//stores size of array
        printf("Enter size of array:");
        scanf("%d",&n);
        int arr[n];//creates array of size n
        printf("Enter elements:");
        for(int i=0;i<n;i  )
        {
            scanf("%d",&arr[i]);
        }
        sort(arr,n);//invoke sort(int,int) function which later invokes bin(int,int) function
        return 0;
    }

CodePudding user response:

Declare a routine before using it.

Either move the definition of bin before the definition of sort or put this non-definition declaration before sort:

void bin(int a[], int size);
  • Related