954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Function that returns void

I am struggling with creating a function that is void. I can write the code inline without a function as follows :

#include
#include
#include
#include

using namespace std;

int main()
{
string answer;
answer = "Yes";
while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing
// Announce purpose of program:
cout << "This program finds roots of a quadratic equation." << endl;
// Input the coefficients:
cout << "Enter the coefficients a, b, and c, separated by spaces:>";
double a;
double b;
double c;
cin >> a >> b >> c;
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else if ( discriminant < 0 ) {
cout << "Two complex roots, where the real part is "
<< setprecision (4) << (0 - b) / (2 * a) << endl
<< "and the imaginary part is plus or minus "
<< setprecision (3) << abs(sqrt(0 - discriminant) / (2 * a)) << "." << endl;
} else { // if ( discriminant == 0 || discriminant == -0 )
cout << "Two identical real roots, both "
<< setprecision (4) << (0 - b) / (2 * a)
<< "." << endl;
} // else
// function main
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}


I can write the function as below and it works, however it runs the functions output and then gives me a 0. :

#include
#include
#include
#include
using namespace std;
// Function
int Calc(double a, double b, double c)
{
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 || discriminant == 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else {
cout << "In this case, the roots of the equation are imaginary." << endl
<< "We will not perform any calculations" << endl;
}
return (0);
}

int main()
{
// Declare local variables
string answer;
double a;
double b;
double c;
// Assign value to answer string
answer = "Yes";

while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing


// Statement and input the coefficients:
cout << "Determine the roots (x1 and x2) of the equation using the quadratic formulas: " << endl;
cout << "Enter the coefficients for a, b, and c, separated by spaces:";
cin >> a >> b >> c;
cout << Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}


WHICH IS JUST A SET UP SO YOU UNDERSTAND I HAVE BEEN WORKING ON MY HOMEWORK. My question is about using void functions and the error I get when I try to write one. Here is the problem code :

#include
#include
#include
#include
using namespace std;
// Function
void Calc(double a, double b, double c)
{
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 || discriminant == 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else {
cout << "In this case, the roots of the equation are imaginary." << endl
<< "We will not perform any calculations" << endl;
}
}

int main()
{
// Declare local variables
string answer;
double a;
double b;
double c;
// Assign value to answer string
answer = "Yes";

while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing


// Statement and input the coefficients:
cout << "Determine the roots (x1 and x2) of the equation using the quadratic formulas: " << endl;
cout << "Enter the coefficients for a, b, and c, separated by spaces:";
cin >> a >> b >> c;
cout << Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}


Here is the error on compile :

C:\Program Files\Utilities\Microsoft Visual Studio\MyProjects\Project3\proj3.cpp(45) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
Error executing cl.exe.


---------------

Any insight into using a function that returns void would be appreciated. Otherwise I go back to writing the code without a function.

ElectroBoy
Newbie Poster
6 posts since Mar 2004
Reputation Points: 11
Solved Threads: 0
 

if it returns void, then you can't use the return value b/c there isn't one! you are trying to "cout << Calc()" , that means print out the return value of function Calc(), but it has no return value since the return type is void.

infamous
Junior Poster in Training
77 posts since Mar 2004
Reputation Points: 47
Solved Threads: 2
 

Hi,

I think what infamous is saying is that you need to just call Calc(a,b,c); and be done with it... do not try to cout << Calc(a,b,c).

[CODE]

//cout << Calc(a,b,c);
Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";

[\CODE]

The 0 that you are seeing is because if your function returns cleanly, it will send a 0 back to the calling function (main called Calc.... Calc ran fine, and it sends you a 0 to let you know it ran fine).

Good Luck.

Christian

kc0arf
Posting Virtuoso
Team Colleague
1,937 posts since Mar 2004
Reputation Points: 121
Solved Threads: 57
 

I understand the error I am making and it makes sense. Its funny how once something clicks in your head it seems so simple. My understanding was incomplete. Thank you for helping me get this point Infamous and kc0arf.

ElectroBoy
Newbie Poster
6 posts since Mar 2004
Reputation Points: 11
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You