需要帮助调试这个C程序

时间:2014-09-16 21:11:58

标签: c

所以我一直致力于“删除评论”计划一段时间,并取得了很大进展。我是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 

我无法找到解决这两个问题的方法。教授通过定义不同的状态提出了一种不同的编写程序的方法,但是当我尝试它时,它更令人困惑。

请尽快提供帮助,我该如何修复*问题以及我的条件应该是什么,以便我可以打印出错误信息以获取不完整的评论?

1 个答案:

答案 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();

        }

    }