C++程序不对......除非我把cout放在循环中?

Ant*_*ant -4 c++ palindrome

您可以从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)

axi*_*iac 5

y函数内的局部变量palindromecheck()未初始化.这使得程序的行为无法预测.

cout << i << endl;包含该行时,它会y以一个值开始,该值使您的程序看起来像是在工作.如果不包含它,y则使用不同的值进行初始化,并且不再起作用.

在这两种情况下,它看起来都很有效.实际上,程序的行为是不确定的.

y在外部循环之前正确初始化(在其声明中).

  • @AntiElephant:不需要做任何绝望的事情.这不像你是第一个忘记初始化变量的程序员.只需修好它,继续生活吧. (2认同)