2017-02-08 1 views
0

Я хочу определить, четное или нечетное число. Поскольку я хотел практиковать свои новые знания о классах, я написал класс и создал функцию, которая помогла мне определить, является ли число нечетным или четным.Я новичок в C++ и изо всех сил пытаюсь понять, почему мой код работает отлично, но все же возвращает абсурдное число после запуска

После компиляции и тестирования моего кода он работает отлично. Но после распечатки инструкции печати, встроенной в эту функцию, она также печатает огромное количество.

Почему программа возвращает это число?

#include <iostream> 

    using namespace std; 

    class numbers{ 

     public: 
      int odev(int num) 
      { 
       if (num % 2 == 0){ 
       cout << num << " is an even number" << endl; 
       } 
       else{ 
       cout << num << " is an odd number" << endl; 
       } 

      } 

      int greatest_number(int fnum, int snum, int tnum) 
      { 
       if (fnum > snum && fnum > tnum){ 
        cout << fnum << " is greatest among these" << endl; 
      } 
        else if (snum > fnum && snum > tnum){ 
         cout << snum << "is greatest among these" << endl; 
        } 
       else{ 
        cout << tnum << " is the greatest among these" << endl; 
       } 
      } 
    }; 
    int main() 
    { 
     numbers arit; 
     float d; 

     cout <<"Enter any number: \n> "; 
     cin >> d; 

     cout << arit.odev(d) << endl; 

     return 0; 
    } 

Это то, что он показывает.
This is what it shows.

+5

«Мой код работает отлично, но все же возвращает абсурдное число после запуска» хммм. – George

+0

Похоже, случайное число, скорее всего, является неинициализированной переменной. – chris

+0

Вы объявили 'float'' '' 'и затем передали это методу, ожидающему' int', вы попробовали любую отладку? – EdChum

ответ

5

Функция член odev не возвращает ничего, даже если его возвращаемый тип int. Следовательно, ваша программа имеет неопределенное поведение.

Вы можете это исправить, добавив return утверждение или изменение типа возвращаемого значения void и замены

cout << arit.odev(d) << endl; 

с

arit.odev(d); 

функцией-члена greatest_number страдает от тех же проблем.


Вы можете обнаружить такие ошибки во время компиляции, подняв уровень предупреждения. Когда я компилирую опубликованный код с помощью g++ -Wall, я получаю следующие сообщения.

socc.cc: In member function ‘int numbers::odev(int)’: 
socc.cc:17:7: warning: no return statement in function returning non-void [-Wreturn-type] 
     } 
    ^
socc.cc: In member function ‘int numbers::greatest_number(int, int, int)’: 
socc.cc:30:7: warning: no return statement in function returning non-void [-Wreturn-type] 
     }