#include <iostream>
#include <math.h>
using namespace std;
class ip{
private:
string ip;
int result[8];
int sum;
public:
void input(){
/* cout<<"Enter First 8 Binary in Ip address: ";
cin>>ip;
for(int i=0,j=7;i<8 ,j>=0;++i,--j){
if(ip[i]=='1'){
result[i]=pow(2,j);
}else if(ip[i]=='0'){
result[i]=0;
}
}
for(int i=1 ; i<8 ; ++i){
sum=sum+result[i];
} */
cout<<sum<<"\n";
}
};
int main() {
ip convert;
convert.input();
return 0;
}
在运行此代码时遇到一些问题,然后我了解到问题在于整数初始化...
请帮助我,因为我得到了多余的输出
运行此代码后,我的输出是:131 我希望输出为'0' 为什么会这样
答案 0 :(得分:1)
您是对的,一个问题是您没有将sum
初始化为零。同样,int i = 1
应该是int i = 0
。
sum=0;
for(int i=0 ; i<8 ; ++i){
sum=sum+result[i];
代码还有很多其他问题,包括不必要使用类,不必要使用类变量,不必要使用浮点函数,不必要使用临时数组等。此程序可能会更简单。
答案 1 :(得分:1)
在C ++中,自动存储持续时间整数变量未初始化为任何特定值,并且将包含那些内存位置中已经发生的任何垃圾位模式。从语言标准的角度来看,变量的值是不确定的,使用它会导致不确定的行为。如果您将其定义为静态变量,则它将在C ++中自动初始化为0。
如果您尝试使用未初始化的变量,很可能编译器也会发出警告。
在GCC中,如果使用以下标志进行编译,则会看到警告:
-Wuninitialized
如果未使用自动变量而未对其进行初始化,或者如果setjmp调用可能破坏了该变量,则发出警告。在C ++中,警告是否在没有构造函数的类中出现非静态引用或非静态const成员。
根据Peter的评论进行更新:
在上述情况下,代码创建该类类型的自动存储期限对象。但是,由于您只是将ip
类型的对象声明为ip convert
,并且没有自己的构造函数来初始化类对象的成员值,因此将调用编译器的默认构造函数。大多数编译器(如果不是全部)都不会为您初始化成员值,因此您会看到与创建对象的内存位置中存在的位模式相对应的输出。