尝试显示字符数组 C++ 时出现奇怪的输出
Strange output when trying to display an array of characters C++
我正在尝试创建一个以特定顺序保存字符数组的 Rotor 结构。
struct Rotor
{
public:
char assignedRotor[26];
void setRotor(int rotor)
{
switch(rotor)
{
case(1):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor1[i];
}
break;
case(2):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor2[i];
}
break;
case(3):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor3[i];
}
break;
};
}
private:
char rotor1[26] = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'};
char rotor2[26] = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'};
char rotor3[26] = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'};
};
第一个和第三个转子配置没有问题。但是,当我尝试显示第二个转子时:
int main()
{
Machine enig;
for(int i; i < 26; i++)
{
cout << enig.rotor2.assignedRotor[i] << endl;
};
return 0;
}
我得到这个作为输出:
在 C++ 中,如果您要声明任何变量,则必须对其值进行初始化,否则它将成为垃圾值。在您的情况下,您只是在循环中声明 int i
并且变量 i
将指向一些垃圾值。您可以通过在循环中初始化 i = 0
来修复。
int main()
{
Machine enig;
for(int i = 0; i < 26; i++)
{
cout << enig.rotor1.assignedRotor[i] << endl;
};
return 0;
}
我正在尝试创建一个以特定顺序保存字符数组的 Rotor 结构。
struct Rotor
{
public:
char assignedRotor[26];
void setRotor(int rotor)
{
switch(rotor)
{
case(1):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor1[i];
}
break;
case(2):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor2[i];
}
break;
case(3):
for(int i; i < sizeof(rotor1); i++)
{
assignedRotor[i] = rotor3[i];
}
break;
};
}
private:
char rotor1[26] = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'};
char rotor2[26] = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'};
char rotor3[26] = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'};
};
第一个和第三个转子配置没有问题。但是,当我尝试显示第二个转子时:
int main()
{
Machine enig;
for(int i; i < 26; i++)
{
cout << enig.rotor2.assignedRotor[i] << endl;
};
return 0;
}
我得到这个作为输出:
在 C++ 中,如果您要声明任何变量,则必须对其值进行初始化,否则它将成为垃圾值。在您的情况下,您只是在循环中声明 int i
并且变量 i
将指向一些垃圾值。您可以通过在循环中初始化 i = 0
来修复。
int main()
{
Machine enig;
for(int i = 0; i < 26; i++)
{
cout << enig.rotor1.assignedRotor[i] << endl;
};
return 0;
}