我仍然是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
答案 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
),您可以修改该变量而不会影响其他任何内容。