Я просто пересматриваю файл ввода/вывода для 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, но это не так. Почему это?
благодаря
Ваши внутренние циклы не ломаются, поэтому вы получаете бесконечный цикл - простой. Внешняя петля только получает шанс сломаться, когда останутся внутренние циклы. Рабочий пример не имеет внутренних циклов, поэтому внешний контур может завершиться.
g++ -Wall -Wextra -g
). Затем используйте отладчик (gdb
)!inputstream.eof()
в начале каждого цикла: если внешний цикл никогда не имеет шанса на начало, он не сможет проверить.