2013-05-30 181 views
0

这是一个非常特殊的情况,但我是C++的新手,并且不理解我为项目euler网站编写的这个程序的输出。循环中的C++范围

int x = 999; 
int y = 999; 
string result; 

while (x > 320) 
    { 
    while(y > 320) 
     { 
     int inttoconvert = (x*y); 
     cout<<inttoconvert<<"<-----This is product"<<endl; 
     string result; 
     ostringstream convert; 
     convert << inttoconvert; 
     result = convert.str(); 

     if (result[0] == result[5] && result[1] == result[4] && result[2] == result[3]) 
      { 
      cout<<"The largest palindrome of 2 3-digit numbers is "<<result<<endl; 
      y = 0; 
      x = 0; 
      } 
     else 
      { 
      cout<<y<<endl; 
      y--; 
      } 
     }//end while 
    cout<<"this is x---->"<<x<<endl; 
    x--; 

    }//end while 

输出显示X减Y已递减到321只后,但随后一再递减,程序不进入第二而再次循环。

我开始变得疑神疑鬼关于视觉表达

+1

你期望发生的?一旦'y <= 320','y'永远不会再次增加,所以代码不会有任何理由多次进入内部循环。 – Mankarse

+0

这不是一个范围界定问题,而是一个逻辑/算法问题。 – squiguy

+0

错误在于你的代码,而不是编译器。 –

回答

1

你永远不会重置Y,我相信这就是为什么你再次有问题

2

程序不会进入第二个while循环,因为嵌套循环全部共享相同的范围。在退出第二个while循环后,y不会再次被重置。所以一旦y不能满足内环的条件,它不会进入它,它会跳过它,直接进入递减x

0

进入循环。在(y> 320)循环后,y等于320. 退出(y大于320)循环。 x减少到998. 再次检查(x> 320)条件。 这是真的,所以它试图再次执行(y> 320)循环。 y仍然等于320,所以它不能再次进入该循环。 因此,它将继续跳过该循环并递减x。

2

您应该在x循环的开始处初始化y,而不是在两个循环之外。

int x = 999; 
string result; 

while (x > 320) 
    { 
    int y = 999; 
    while(y > 320) 

您还可以使用for循环,而不是while

for (int x = 999; x > 320; x--) { 
    for (int y = 999; y > 320; y--) { 
    ... 
    } 
}