2017-02-22 21 views
0

По какой-то причине мой оператор else if не работает. Когда я запускаю код с вводом «20», я получаю выражение для факториала, затем «20», когда мой else if оператор должен исправить это.Почему мое заявление «else if» не работает?

#include <iostream> 

unsigned int factorial(unsigned int number); 

int main() 
{ 
    unsigned int number; 
    std::cout << "Please enter a positive interger. "; 
    std::cin >> number; 
    std::cout << "facorial of " << number << " = " << factorial(number); 
    return 0; 
} 

unsigned int factorial(unsigned int number) 
{ 
    if (number > 1 && number < 20) { 
     return number * factorial(number - 1); 
    } 
    else if (number >= 20) { 
     std::cout << "error" << std::endl; 
    } 
    else 
     return 1; 
} 
+0

Я не понимаю, о чем вы спрашиваете? В противном случае, если он ловит 20, должен возвращаться «ошибка». –

ответ

2

Вы не возвращаетесь из ваших еще, если, в результате чего в неопределенном возвращении из вашей функции факториала: What if I don't put a return value to a function whose prototype returns a value

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

#include <iostream> 

unsigned int factorial(unsigned int number); 

int main() 
{ 
    unsigned int number; 
    std::cout<< "Please enter a positive interger. "; 
    std::cin >> number; 
    std::cout << "facorial of " << number << " = " << factorial(number); 
    return 0; 
} 

unsigned int factorial(unsigned int number) 
{ 
    if (number > 1 && number < 20){ 
     return number * factorial(number - 1); 
     } 
    else if (number >= 20){ 
     std::cout << "error" << std::endl; 
     return 0; 
     } 
    else 
     return 1; 
} 
+1

Эй, я знаю, что это было давно, так как я опубликовал это, но я просто хотел поблагодарить вас за ваш ответ. Я ценю это. – bsmith144

 Смежные вопросы

  • Нет связанных вопросов^_^