2013-08-08 3 views
-7

Я работаю над созданием своего рода программы minesweeper в C++, и после запуска некоторых тестов я обнаружил, что по какой-то причине я не вижу, одна из моих циклов цикла никогда не заканчивается. Я просмотрел код уже довольно давно и не вижу причины. большое спасибо за то, что помогли мне, я немного новичок в C++ и очень недоумеваю.Почему это для цикла бесконечно?

Вот код:

for (int r = 0; r <= 8; r++) 
{ 
    for (int c = 0; c <= 8; c++) 
    { 
     int num = 0; 
     if (realmap[r][c] != 10) 
     { 
      if (r - 1 != -1 && realmap[r - 1][c] == 10) 
      { 
       num++; 
      } 
      if (r - 1 != -1 && c + 1 != 9 && realmap[r - 1][c + 1] == 10) 
      { 
       num++; 
      } 
      if (c + 1 != 9 && realmap[r][c + 1] == 10) 
      { 
       num++; 
      } 
      if (r + 1 != 9 && c + 1 != 9 && realmap[r + 1][c = 1] == 10) 
      { 
       num++; 
      } 
      if (r + 1 != 9 && realmap[r + 1][c] == 10) 
      { 
       num++; 
      } 
      if (r + 1 != 9 && c - 1 != -1 && realmap[r + 1][c - 1] == 10) 
      { 
       num++; 
      } 
      if (c - 1 != -1 && realmap[r][c - 1] == 10) 
      { 
       num++; 
      } 
      if (r - 1 != -1 && c - 1 != -1 && realmap[r - 1][c] == 10) 
      { 
       num++; 
      } 
      realmap[r][c] = num; 
      Sleep(5000); 
      cout << "test3"; 
     } 
    } 
} 

Если вы видите проблему, спасибо очень много. Я буду включать остальные утверждения if, если никто не сможет найти проблему.

+0

Вы пытались использовать отладчик, например MVS? –

+4

Почему у вас есть вложенные петли, модифицирующие r и c два раза? – Bart

+0

Барт кажется на правильном пути. Вы повторно инициализируете переменную «r» и «c» до нуля, что предотвратит завершение внешних контуров. –

ответ

2
if(r+1 != 9 && c+1 != 9 && realmap[r+1][c=1] ==10 

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

+0

большое спасибо !!! –

0

Мне кажется, что @Bart находится на правильном пути здесь. У вас есть вложенные циклы, которые изменяют одни и те же переменные. Это, как правило, признак того, что что-то не так. Попробуйте переименовать переменные внутреннего цикла r и c.

+0

мой код был напечатан неправильно здесь, позвольте мне поместить фактический код –

+0

Вложенные циклы изменяют разные переменные с тем же именем. Ну, они были, но теперь, когда код был изменен еще раз, вложенные циклы исчезли. –

1

Я не думаю, что вы работаете в бесконечном цикле.

Причина в том, что эти итераторы цикла имеют разные области действия и отлично действуют на C++.

Но ваш код имеет sleep(5000), который ждет 5000 секунд каждый раз, когда он сталкивается с этим. Удалите sleep и попробуйте запустить код.

+0

Сон измеряется в миллисекундах –

Смежные вопросы