crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Банальная программа. Но зависает., в чем же дело ?
kvak
  опции профиля:
сообщение 6.5.2010, 8:01
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 5.5.2010
Пользователь №: 1690

Спасибо сказали: 1 раз(а)




Репутация:   0  


Все. Понял. Спасибо.
Попробывал сегодня поменять этот же проблемный цикл, и заработало, когда стал использовать слово break для выхода. Но вот реально все равно не пойму почему в том случае, когда не работает, не срабатывает условие
index =-1;

Не работает и зависает

while  (!file.atEnd()) 
{

Engine = file.readLine();

for (int a = 0; a < size; a++)
  {
            int c = 0;
            for (int index = 0; index =-1; index++ ) {
            index = Engine.indexOf(vxod[a], index);
            summary[a] += c;
            c++;            
        }  
  }          
}



Работает как надо и очень быстро

while  (!file.atEnd()) 
{

Engine = file.readLine();

for (int a = 0; a < size; a++)
   {
            for (int index = 0;; index++ ) {
            index = Engine.indexOf(vxod[a], index);
            if (index == - 1)
            break;
            summary[a]++;
        }  
   }          
}




Блин. Все. Теперь понял. Я вместо условия задал приравнивание. Тогда почему он вообще скомпилировал...

Хотя нет. все-таки у меня все-таки было изначально index !=1 И это условие получается не выполнялось.


for (int index = 0 ; index != -1; index++ ) {
index = Engine.indexOf(vxod[a], index);
...
Т.е. я понимаю так , что цикл должен прерываться в том случае, когда index станет равен - 1
Т.е. как я понял ошибка в том, что когда index становится - 1, то перед проверкой условия происходит index++
и поэтому он всегда 0. Так получается ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.5.2010, 10:47
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kvak @ 6.5.2010, 12:01) *
Тогда почему он вообще скомпилировал...
потому что в этом месте оператор for всего лишь проверяет "тут ИСТИНА или ЛОЖЬ?", если результат выражения (в данном случае значение index) не нуль, значит ИСТИНА.
тоже самое случается и в операторе if
if (index = -1)
тут компилятору не на что ругаться, он присвоит переменной index значение -1, это значение НЕ ЛОЖЬ = ИСТИНА, условие выполниться
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.1.2025, 2:54