返回一个号码

时间:2016-10-29 23:35:31

标签: c++

我仍然是C ++的新手,似乎有一个问题。当我运行我的程序时,我的getInt()似乎没有在我的myInteger方法中返回私有数据成员print()。它只返回0,但我在print()中的其余方法调用返回了相应的数字。我也尝试输入myInteger而不是getInt(),但仍然会返回0.我知道我做错了什么,但我不确定是什么。

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;

class myInt {
public:
  myInt();
  myInt(int newInt);

  void print();
  void setInt(int);

  int getInt();
  int sumDigits();
  int reverse();

  int oddDigitCount();
  int evenDigitCount();
  int zeroCount();

private:
  int myInteger;
};

int main()
{
    srand(815);

    myInt theNum;
    for (int i = 0; i != 10; i++) {
        theNum.setInt(rand());
        theNum.print();
    }

  return 0;
}

myInt::myInt()
{
    myInteger = 0;
}

myInt::myInt(int newInt)
{
    setInt(newInt);
}

void myInt::setInt(int newInt)
{
    if (newInt > 0)
        myInteger = newInt;
    else
        myInteger = abs(newInt);
}

int myInt::getInt()
{
    return myInteger;
}

int myInt::sumDigits()
{
    int sum = 0, rem;
    while (myInteger != 0) {
        rem = myInteger % 10;
        sum += rem;
        myInteger /= 10;
    }
   return sum;
}

int myInt::reverse()
{
    int reversed = 0;
    int quo, rem;
    quo = myInteger;
    while (quo != 0) 
    {
        rem = quo % 10;
        reversed = reversed * 10 + rem;
        quo /= 10;
    }
   return reversed;
}

int myInt::oddDigitCount()
{
    return 0;
}

int myInt::evenDigitCount()
{
    return 0;
}

int myInt::zeroCount()
{
    return 0;
}

void myInt::print()
{
    cout << "The number is " << getInt() << endl
         << "----------------------------------------" << endl
         << "Adding the digits result" << setw(16) << sumDigits() << endl
         << "Reversing the digits result" << setw(13) << reverse() << endl  
         << "Odd digits" << setw(30) << oddDigitCount() << endl
         << "Even digits" << setw(29) << evenDigitCount() << endl
         << "Zeros" << setw(35) << zeroCount() << endl
         << endl;
}

for循环的前两次迭代的输出,

  

数字为0

           

添加数字结果9

     

反转数字结果72

     

奇数位0

     

偶数0

     

零0

     

数字为0

           

添加数字结果20

     

反转数字结果41681

     

奇数位0

     

偶数0

     

零0

1 个答案:

答案 0 :(得分:1)

int myInt::sumDigits()
{
    int sum = 0, rem;
    while (myInteger != 0) {
        rem = myInteger % 10;
        sum += rem;
        myInteger /= 10;  // <-- HERE
    }
   return sum;
}

此代码在打印前将myInteger重置为0.

您将其称为此声明的一部分:

cout << "The number is " << getInt() << endl
     << "----------------------------------------" << endl
     << "Adding the digits result" << setw(16) << sumDigits() << endl
     << ...

编译器显然已选择在调用sumDigits之前评估对getInt的调用(C ++未指定此顺序),因此在getInt查看{{1}时},它已被myInteger设置为0。

要解决此问题,请执行与sumDigits相同的操作:创建一个本地变量(例如reverse),您可以修改该变量而不会影响其他任何内容。