您可以从Project Euler中识别出这一点.我正在尝试编写一个代码,以便从三位数字乘以找到最大的回文数.有cout << i << endl; 在for循环中指示我们在过程中的位置.如果您完全按原样运行该代码,那么我将获得答案,但如果我取出cout << i << endl; 然后我似乎得到零.
我不知道发生了什么,代码似乎工作取决于我是否包括cout来指示我在哪里......什么?
#include <iostream>
using namespace std;
bool palindromecheck(int x);
int main() {
int largest=0;
for (int i = 999; i > 0; i--) {
cout << i << endl;
for (int j = 999; j > 0; j--) {
if (palindromecheck(i*j) && i*j > largest) {
largest = i*j;
}
}
}
cout << "The largest palindrome made from multiplying two 3-digit numbers is " << largest << endl;
}
bool palindromecheck(int x) {
int z = x;
int y;
while (z != 0) {
while (z%10 != 0) {
z -= 1;
y += 1;
}
while (z%10 == 0 && z != 0) {
z /= 10;
y *= 10;
}
}
return x==y;
}
Run Code Online (Sandbox Code Playgroud)
y函数内的局部变量palindromecheck()未初始化.这使得程序的行为无法预测.
当cout << i << endl;包含该行时,它会y以一个值开始,该值使您的程序看起来像是在工作.如果不包含它,y则使用不同的值进行初始化,并且不再起作用.
在这两种情况下,它看起来都很有效.实际上,程序的行为是不确定的.
y在外部循环之前正确初始化(在其声明中).