2013-05-30 7 views
0

Это очень конкретный случай, но я новичок в C++ и не понимаю выход этой программы, которую я написал для веб-сайта проекта euler.Scope in Loops in 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 

Выходные данные показывают, что х декременты только после того, как у имеет декрементируется до 321, но затем он декременты многократно и программа не входит в секунду, а снова петли.

Я начинаю подозрительно визуального экспресс

+1

Что вы ожидаете произойдет? Как только 'y <= 320',' y' больше никогда не увеличивается, поэтому никогда не возникает причин, по которым код вводит внутренний цикл более одного раза. – Mankarse

+0

Это не проблема, а проблема с логикой/алгоритмом. – squiguy

+0

Ошибка в коде, а не в компиляторе. –

ответ

1

вы никогда не сбросить у, я считаю, что именно поэтому у вас возникли проблемы

2

Программа не будет вводить второй, а цикл снова, потому что вложенные циклы все имеют одинаковую область. y не будет сброшен после завершения второго цикла. Поэтому однажды y не может удовлетворять условиям внутреннего цикла, он не войдет в него, он просто пропустит его и перейдет прямо к декременту x.

0

Входит в цикл. после цикла (y> 320), y равно 320. выходы (y больше 320). x уменьшен до 998. снова проверяет состояние (x> 320). Это правда, поэтому он пытается снова выполнить цикл (y> 320). y все равно равно 320, поэтому он больше не может войти в этот цикл. , поэтому он будет пропускать этот цикл и уменьшать x.

2

Вы должны инициализировать y в начале цикла x, но не за пределами обеих петель.

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--) { 
    ... 
    } 
}