所以我一直致力于“删除评论”计划一段时间,并取得了很大进展。我是C的新手,所以我用一些基本的功能和技巧来写它。代码的输入文件不需要读取任何函数,而是使用<在终端。
我正在使用的文本文件包含以下内容:
some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff
some/* crazy stuff
测试不同的评论格式。我到目前为止的代码是:
#include <stdio.h>
#define IN_COMMENT 1
int main(int argc, char **argv)
{
int c;
while ((c=getchar())!=EOF)
{
if(c=='/'&&getchar()=='*')
{
while(c!='*' && getchar()!='/')
{
c = " ";
c= getchar();
}
}
if(c=='"')
{
c=getchar();
while(c!='"')
{
putchar(c);
c=getchar();
}
putchar(c);
}
}
putchar(c);
printf("done.\n");
return 0;
}
问题是我无法找到一种方法来设置一个条件,当条件开始但是从未关闭时,会打印出错误消息,例如(某些/ *疯狂的东西)< / p>
另一个问题是我似乎无法找到当我运行程序并输入文本文件时省略*的错误,所以当我输入时:
some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff
我最终获得以下内容:一些*东西
some* stuff
some**/tuff
"some /* crazy */ stuff "
some* stuff
我无法找到解决这两个问题的方法。教授通过定义不同的状态提出了一种不同的编写程序的方法,但是当我尝试它时,它更令人困惑。
请尽快提供帮助,我该如何修复*问题以及我的条件应该是什么,以便我可以打印出错误信息以获取不完整的评论?
答案 0 :(得分:0)
if(c=='/'&&getchar()=='*')
{
while(c!='*' && getchar()!='/')
{
c = " ";
c= getchar();
}
}
在这里检查是否&#39; *&#39;和&#39; /&#39;一起出现,但只替换c
一次。它应该是:
if(c=='/'&&getchar()=='*')
{
while(c!='*' && getchar()!='/')
{
c = " ";
c= getchar();
c = " ";
c= getchar();
}
}