In the previous post, I confused you into the depth of the functions and my abstractions although, I hope that you got the concept fairly. The hint that I gave you in the previous post is about the order of the functions. If you modified checkRegistrationEligibility()
function by adding enterAString()
and enterAnInt()
, you may have got some error because checkRegistrationEligibility()
function doesn’t know anything about enterAString()
and enterAnInt()
since they are both defined as well as declared below the function. The issue with the order of the functions can be fixed but I will explain this later!
The functions with which we get father’s name, place of living and education in the previous post are very similar to each other. In fact, they are just the same with the exception of the statement being printed out!
Fortunately, there are more ways! Until now, we are just getting outputs from the functions in the form of returning values. But in many cases, it is necessary to have inputs in the functions. If you recall the first post on the topic of Functions/Subroutines, we discussed that a function takes the input, modifies it and then, outputs the modified input. We can always have the user input but there are many many cases where user input is not the solution! A pair of round brackets after the end of each function is not useless; it is for taking data into the function(inputs) or in other words, for taking parameters.
I had given you the task of creating a function which takes the user input for the number to be squared and then, returns the square of that number. Here it is done with a function that takes the input from the parameter, squares it and then, returns it.
int square( int value ) //a parameter of type 'int'
{
return (value * value);
}
int main()
{
//In 'square' function, we pass 5 as a parameter, giving us 25 as a return value.
cout << square(5) << endl; //Outputs 25
return 0;
}
This might have given you the idea of how parameters of a function work. Let us remove the three functions as described in the previous post namely, enterYourFatherName()
, enterYourPlace()
and enterYourEducation()
and replace it with only one function!
string enterRequiredData( string required_data ) //a parameter of type string
{
string data = "NULL";
do
{
cout << "Enter your " << required_data << ": " << endl;
data = enterAString();
cout << "Is your " << required_data << " " << data << "?" << endl;
} while (!isDataSure());
cout << "Your " << required_data << " is " << data << "." << endl;
return data;
}
Now, in the registrationSection()
function:
void registrationSection()
{
enterRequiredData("father\'s name");
enterRequiredData("place of living");
enterRequiredData("education");
}
All the other codes will remain the same! You can see that a single function is doing quite a job because of the fact that it is more flexible now. The output of a function should depend on the parameters being given into it or else, the function should have no inputs/parameters at all. However, it is not necessary to use the output of a function for something else. In the codes above, we haven’t used the strings being returned by the functions inside the registrationSection()
. We can store them in a separate file which is the prime purpose of registration (We will discuss getting data into and out of a file soon).
That’s all! Function parameters are awesome! But there are still a few problems that we may encounter, the first one is the order of functions and the second one is getting multiple outputs. You haven’t seen any example of multiple inputs/parameters as well. There you go!
int clamp(int value, int min, int max)
{
if(value < min)
return min;
else if(value > max)
return max;
return value;
}
Try to code functions with multiple parameters and have fun with them!