I just learned about C++ functions; can I use if statements on function return values?
What I am confused on is about the isNumPalindrome() function. It returns a boolean value of either true or false. How am I suppose to use that so I can display if it's a palindrome or not. For ex. if (isNumPalindrome == true) cout << "Your number is a palindrome"; else cout << "your number is not a palindrome.";
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int askNumber();
bool isNumPalindrome();
int num, pwr;
int main()
{
askNumber();
return 0;
}
bool isNumPalindrome()
{
int pwr = 0;
if (num < 10开发者_Python百科)
return true;
else
{
while (num / static_cast<int>(pow(10.0, pwr)) >=10)
pwr++;
while (num >=10)
{
int tenTopwr = static_cast<int>(pow(10.0, pwr));
if ((num / tenTopwr) != (num% 10))
return false;
else
{
num = num % tenTopwr;
num = num / 10;
pwr = pwr-2;
}
}
return true;
}
}
int askNumber()
{
cout << "Enter an integer in order to determine if it is a palindrome: " ;
cin >> num;
cout << endl;
if(isNumPalindrome(num))
{
cout << "It is a palindrome." ;
cout << endl;
}
else
{
cout << "It is not a palindrome." ;
cout << endl;
}
return num;
}
The return value for a function can be used just like a variable of the same type.
Your main program should look something like this:
int main()
{
int num=askNumber();
bool isPal=isNumPalindrome(num);
if (isPal)
{
//do something
}
else
{
//do something else
}
return 0;
}
or you could be even more succinct:
int main()
{
if (isNumPalindrome(askNumber()))
{
//do something
}
else
{
//do something else
}
return 0;
}
What you don't want to do is use those global variables you defined. In more complicated programs that will be a recipe for disaster.
Edit: you'll want to make sure you edit your isNumPalindrome function to accept the number it's working with:
bool isNumPalindrom(int num)
{
...
}
Yes, you can do such thing.
Actually you could do just...
if (isNumPalindrome()) { ... }
if(isNumPalindrome())
{
cout << "Your number is a palindrome";
}
else
{
cout << "Your number is not a palindrome";
}
when a function returns a type you can think of that function as being replaced by the return value and type. so for you:
isNumPalindrome() -> {true/false}
so you can write for example:
if(isPalindrome())
cout<<"it is!"<<endl;
else
cout<<"it is not :("<<endl;
As many people have stated, the return value of a function essentially becomes the function's value.
Here's an example of a ternary operation for printing the result.
cout << "The number " << (isNumPalindrome()) ? "is a palindrome" : "is NOT a palindrome";
This is a bit weird looking for a lot of beginners, but it shows how ternary operators can be used to print conditional responses.
First, you shouldn't use globals for num
and pwr
; you should pass them as arguments to functions:
bool isNumPalindrome(int num);
...
num = askNumber();
isNumPalindrome(num);
Second, there's no need to compare a boolean value with true
(or false
); simply use the boolean value.
It's hard to tell what exact syntax you're trying to use in your example "if" statement, but one thing you can't do is have an "if" statement in an expression. In C++, there are expressions and statements. Expressions have values; statements don't.
// valid
if (isNumPalindrome(num)) {
std::cout << '"' << num << "\" is a palindrome." << std::endl;
} else {
std::cout << '"' << num << "\" is not a palindrome." << std::endl;
}
// invalid
std::cout << '"' << num << (if (isNumPalindrome(num)) {
"\" is a palindrome.";
} else {
"\" is not a palindrome.";
}) << std::endl;
// valid, but not recommended
std::cout << '"' << num << "\" is " << (isNumPalindrome(num) ? "" : "not ") << "a palindrome." << std::endl;
For the ternary operator (?:), read "To ternary or not to ternary?"
You could call isNumPalindrome() inside askNumber(), and have the returned value from isNumPalindrome() be used in a conditional test. It's better to pass num as an argument to isNumPalindrome though: isNumPalindrome(int num)
int askNumber()
{
cout << "Enter an integer in order to determine if it is a palindrome: " ;
cin >> num;
if(isNumPalindrome(num)){
cout << "it is a palindrome";
}
cout << endl;
return num;
}
then main can call only askNumber()
yet another solution ;-)
#include <iostream>
#include <sstream>
#include <algorithm>
bool is_palindrome( const int num )
{
std::ostringstream os;
os << num;
const std::string& numStr = os.str();
std::string reverseNumStr = numStr;
std::reverse( reverseNumStr.begin(), reverseNumStr.end() );
const bool result = ( numStr == reverseNumStr );
return result;
}
int main()
{
int num = 0;
std::cout << "Enter an integer in order to determine if it is a palindrome: ";
std::cin >> num;
std::string inset;
if( !is_palindrome( num ) )
{
inset = "not ";
}
std::cout << "It is " << inset << "a palindrome." << std::endl;
}
In a single sentence:
"As the condition of the if statement you can use any expression whose result, once when expression is evaluated, can be implicitly converted to 'bool'."
精彩评论