C ++ - Простой - вложенный, пока циклы никогда не заканчиваются?

0

Я просто пересматриваю файл ввода/вывода для C++. Написание программы, которая печатает собственный исходный код на терминал без комментариев

Вот такие циклы. РАБОТАЕТ с операторами if

while (!inputstream.eof())
{
 if(in_comment == false)
    {
      inputstream.get(temp);
      if(temp == '/')
        {
          inputstream.get(temp1); 
          if (temp1 == '*')
            {
              in_comment = true;

            }
          else
            {
              inputstream.putback(temp1);
            }
        }

      cout << temp;
    }

  if(in_comment == true)
    {
      inputstream.get(temp);
      if(temp == '*')
        {
          inputstream.get(temp); 
          if (temp == '/')
            {
              in_comment = false;
            }
        }
    }
}

И здесь они НЕ работают с циклами

while (!inputstream.eof())
{
 while(in_comment == false)
    {
      inputstream.get(temp);
      if(temp == '/')
        {
          inputstream.get(temp1); 
          if (temp1 == '*')
            {
              in_comment = true;
             break;
            }
          else
            {
              inputstream.putback(temp1);
            }
        }

      cout << temp;
    }

  while(in_comment == true)
    {
      inputstream.get(temp);
      if(temp == '*')
        {
          inputstream.get(temp); 
          if (temp == '/')
            {
              in_comment = false;
            }
        }
    }
}

Я ожидал, что маркер eof заставит программу вырваться из внешнего цикла while, но это не так. Почему это?

благодаря

  • 2
    Скомпилируйте все предупреждения и отладочную информацию ( g++ -Wall -Wextra -g ). Затем используйте отладчик ( gdb )
  • 0
    Вы ожидали, что внешнее время будет сломано, пока внутреннее пока еще работает? Если так, то это твоя проблема. Он только проверяет условие !inputstream.eof() в начале каждого цикла: если внешний цикл никогда не имеет шанса на начало, он не сможет проверить.
Показать ещё 2 комментария
Теги:
while-loop
file-io
eof

1 ответ

3

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню