То, на чем я смущен, является о isNumPalindrome () функцией. Это возвращает булево значение любого TRUE или FALSE. Как я, предполагают для использования этого так, я могу отобразиться, если это - палиндром или нет. Для напр. 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)
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;
}
Возвращаемое значение функции может использоваться так же, как переменная того же типа .
Ваша основная программа должна выглядеть примерно так:
int main()
{
int num=askNumber();
bool isPal=isNumPalindrome(num);
if (isPal)
{
//do something
}
else
{
//do something else
}
return 0;
}
или вы могли бы быть еще лаконичнее:
int main()
{
if (isNumPalindrome(askNumber()))
{
//do something
}
else
{
//do something else
}
return 0;
}
Чего вы не хотите делать, так это использовать те глобальные переменные, которые вы определили. В более сложных программах это будет рецептом катастрофы.
Изменить: убедитесь, что вы отредактировали функцию isNumPalindrome, чтобы она приняла номер, с которым она работает:
bool isNumPalindrom(int num)
{
...
}
Да, вы можете это сделать.
На самом деле вы могли бы просто ...
if (isNumPalindrome()) { ... }
Во-первых, вы не должны использовать глобальные переменные для num
и pwr
; вы должны передавать их в качестве аргументов функциям:
bool isNumPalindrome(int num);
...
num = askNumber();
isNumPalindrome(num);
Во-вторых, нет необходимости сравнивать логическое значение с true
(или false
); просто используйте логическое значение.
Трудно сказать, какой именно синтаксис вы пытаетесь использовать в своем примере оператора if, но вы не можете использовать оператор if в выражении. В C ++ есть выражения и инструкции. Выражения имеют значения; заявления нет.
// 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;
Вместо тернарного оператора (? :) прочтите « В троичный или нет? »
В одном предложении:
«В качестве условия оператора if вы можете использовать любое выражение чей результат , один раз при вычислении выражения, может быть неявно преобразован в ' bool '. "
Вы можете вызвать isNumPalindrome () внутри askNumber () и использовать возвращаемое значение isNumPalindrome () в условном тесте. Однако лучше передать num в качестве аргумента isNumPalindrome: 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;
}
, тогда main может вызывать только askNumber ()
if(isNumPalindrome())
{
cout << "Your number is a palindrome";
}
else
{
cout << "Your number is not a palindrome";
}
Как уже многие говорили, возвращаемое значение функции по сути становится значением самой функции.
Вот пример троичной операции для печати результата.
cout << "The number " << (isNumPalindrome()) ? "is a palindrome" : "is NOT a palindrome";
Этот пример выглядит немного странно для многих начинающих, но он показывает, как троичные операторы можно использовать для печати условных ответов.
когда функция возвращает тип, вы можете думать, что эта функция заменяется возвращаемым значением и типом. так что для вас:
isNumPalindrome () -> {true / false}
так что вы можете написать, например:
if(isPalindrome())
cout<<"it is!"<<endl;
else
cout<<"it is not :("<<endl;
еще одно решение; -)
#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;
}