Я просто узнал о функциях C++; я могу использовать если операторы на функциональных возвращаемых значениях?

То, на чем я смущен, является о 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;
}
7
задан 8 revs, 6 users 69% 20 March 2010 в 19:04
поделиться

9 ответов

Возвращаемое значение функции может использоваться так же, как переменная того же типа .

Ваша основная программа должна выглядеть примерно так:

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)
{
   ...
}
12
ответ дан 6 December 2019 в 06:03
поделиться

Да, вы можете это сделать.

На самом деле вы могли бы просто ...

if (isNumPalindrome()) { ... }
8
ответ дан 6 December 2019 в 06:03
поделиться

Во-первых, вы не должны использовать глобальные переменные для 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;

Вместо тернарного оператора (? :) прочтите « В троичный или нет? »

2
ответ дан 6 December 2019 в 06:03
поделиться

В одном предложении:

«В качестве условия оператора if вы можете использовать любое выражение чей результат , один раз при вычислении выражения, может быть неявно преобразован в ' bool '. "

0
ответ дан 6 December 2019 в 06:03
поделиться

Вы можете вызвать 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 ()

0
ответ дан 6 December 2019 в 06:03
поделиться
if(isNumPalindrome())
{
    cout << "Your number is a palindrome";
}
else
{
    cout << "Your number is not a palindrome";
}
4
ответ дан 6 December 2019 в 06:03
поделиться

Как уже многие говорили, возвращаемое значение функции по сути становится значением самой функции.

Вот пример троичной операции для печати результата.

cout << "The number " << (isNumPalindrome()) ? "is a palindrome" : "is NOT a palindrome";

Этот пример выглядит немного странно для многих начинающих, но он показывает, как троичные операторы можно использовать для печати условных ответов.

2
ответ дан 6 December 2019 в 06:03
поделиться

когда функция возвращает тип, вы можете думать, что эта функция заменяется возвращаемым значением и типом. так что для вас:

isNumPalindrome () -> {true / false}

так что вы можете написать, например:

if(isPalindrome())
  cout<<"it is!"<<endl;
else
  cout<<"it is not :("<<endl;
2
ответ дан 6 December 2019 в 06:03
поделиться

еще одно решение; -)

#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; 
}
0
ответ дан 6 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: