【发布时间】:2015-02-24 09:51:44
【问题描述】:
我只是在为 C++ 修改一些文件 i/o。 编写一个程序,在没有 cmets 的情况下将自己的源代码打印到终端
这里是有问题的循环使用 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 循环
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) -
您是否期望外部 while 被破坏而内部 while 仍在运行?如果是这样,那是你的问题。它只检查每个循环开始时的条件
!inputstream.eof():如果外循环永远没有机会开始,它将无法检查。 -
Basile Starynkevitch 也有一个非常好的建议——学会用好调试器!使用变量 watch 逐行遍历您的代码非常非常有帮助。 (如果你使用 IDE,它几乎肯定有一个调试器。)
标签: c++ file-io while-loop eof