Hey,
I'm writing a function that searches for an id in an array of a structure, for some reason it returns -1 everytime, so I was just hoping another set of eyes could help me clarify this.

int searchAr(student studentar [], int size, int searchid)
{
    int i;
    for(i = 0; i<(size-1); i++)
    {
          if (studentar[i].studentID == searchid)
             {
             return i;
             }
             else
             {
             return -1;
             }
    }
}

> There's only one place in your function where it explicitly returns -1, (in the else code block) ...

> Did you set the studentID variable after you declared a struct-variable from it ?
If no, that's the problem :)

Look carefully at the code of your searchAr function: the for-loop is executing one time only :) ...

int searchAr(student studentar [], int size, int searchid)
{
    int i;
    for(i = 0; i<(size-1); i++)
    {
          /* This for-loop is executing only one time */
          if (studentar[i].studentID == searchid)
             {
             return i;
             }
             else
             {
             return -1;
             }
    }
}

Actually this code is wrong ...

int searchAr(student studentar [], int size, int searchid)
{
    for(int i = 0; i<size; i++)
          if (studentar[i].studentID == searchid) return i;
    return -1;
}

This is already a lot better :) ...

Edit:: for(i = 0; i<(size-1); i++) why is the condition i<(size-1) , I would make i<size of it ...

I've played around with it more and it seems like this would make more sense but now it returns nothing.

int searchAr(student studentar [], int size, int searchid)
{
    int i;
    for(i = 0; i<size; i++)
    {
          if (studentar[i].studentID == searchid)
             {
             return i;
             }
    }
    return -1;
}

I've played around with it more and it seems like this would make more sense but now it returns nothing.

int searchAr(student studentar [], int size, int searchid)
{
    int i;
    for(i = 0; i<size; i++)
    {
          if (studentar[i].studentID == searchid)
             {
             return i;
             }
    }
    return -1;
}

>>but now it returns nothing: that's not true, the function is always returning a value :) ...

What I was doing was using a cout to see if it was passing back the i or -1 now it doesn't print anything when the cout is used.

I've built a small program around your (fixed) search function and the situation you described:

#include <iostream>

using namespace std;

struct student
{
	int studentID;
};

int searchAr(student studentar [], int size, int searchid)
{
    for(int i = 0; i<size; i++)
          if (studentar[i].studentID == searchid) return i;
    return -1;
}

int main()
{
	student stud[5];
	stud[4].studentID = 2;
	cout << "Student with ID \'2\' found at place: " << searchAr(stud,5,2) << " (in the array of students)" << endl;
	return 0;
}

I have to say that it's working in the way it was intended or am I wrong ?

Ya its fixed now I had a problem in my main I didn't notice. Thanks for the help!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.