1. C++ / Говнокод #977

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    TSearchRec sr;
    if(FindFirst(Dir+"\\"+mask,iattr,sr)==0)
    {
     do
     {
      AnsiString Processes=Dir+"\\"+sr.Name;
      //куча кода
      AnsiString newName=sr.Name;
      //еще код
      AnsiString TmpFile=Dir+"\\"+newName;
      if(RenameFile(Processes,TmpFile))
      {
       ...
      }
      {
       ...
       continue;
      }
     }while(FindNext(sr)==0);
    }

    И почему программа "виснет"? Это в клиенте платежной системы... Рыдаю... (стр. 19)

    Запостил: guest, 30 Апреля 2009

    Комментарии (5) RSS

    • Злобный Аноним:
      А можно специально для таких тупых как я объяснить, что не так именно в строке 19?
      Ответить
    • Keeper:
      А что, инструкция continue здесь будет выполняьбся всегда?
      Ответить
    • К.О. (Ну вы поняли кто...):
      Да, всегда.

      Смотри сам:
      Processes = Dir+"\\"+sr.Name;
      newName=sr.Name;
      TmpFile=Dir+"\\"+newName; //читай, Dir+"\\"+sr.Name

      Имеем всегда Processes==TmpFile.
      А значит, RenameFile() вернет false, так как переименовать файл в себя ей не под силу.
      А значит, выполнится continue.
      И самое смешное - мне кажется, при выполнении continue условие не будет пересчитано, ибо цикл с постусловием!
      А значит, прога будет мурыжить один файл.
      Ответить
    • Злобный Аноним:
      "И самое смешное - мне кажется, при выполнении continue условие не будет пересчитано, ибо цикл с постусловием!"
      http://msdn.microsoft.com/en-us/library/6e3dc2z3(VS.80).aspx
      "In a do or while loop, the next iteration starts by reevaluating the controlling expression of the do or while statement."
      Поэтому мне до сих пор интересно, что не так с точки зрения автора в строке 19.
      Ответить
    • - Ну, ты так иногда смотришь на проходящих мимо парней... это трудно не заметить.
      Ответить

    Добавить комментарий