好的,我还有一个问题要问这个程序,我们应该接受.C文件并从中删除所有的注释,我有它的工作方式,但程序似乎在删除第一个注释后卡住了删除第一条评论之后,它就停止保存之后的内容,我也不知道为什么。
精确的书本问题:编写一个程序来删除C程序中的所有注释不要忘记正确处理带引号的字符串和字符常量。
我编写这个程序只是为了删除/**/comments,如果我让它工作,我会修改它,以便也可以执行//comments。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAX_BUFFER   5000
#define SPACE        ' '
#define TAB          '\t'
#define IN            1
#define OUT           0
/* ********************************************************************** */
int main()
{
    char arrayPrimary[MAX_BUFFER];
    char arraySecondary[MAX_BUFFER];
    int i, c, j, size, string;
    for(i = 0;(c = getchar()) != EOF && c != '\0'; i++)
    {
        arrayPrimary[i] = c;
    }
    arrayPrimary[i] = '\0';
    size = i;
    string = OUT;
/* ********************************************************************** */
    for(i = 0, j = 0; i < size; i++, j++)
    {

        if((arrayPrimary[i] == '/' && arrayPrimary[i + 1] == '*'))
        {
            printf("IN\n");
            string = IN;
        }
        else if(string == OUT)
        {
            arraySecondary[j] = arrayPrimary[i];
        }

        else if(string == IN && arrayPrimary[i] == '*' && arrayPrimary[i + 1] == '/')
        {
            printf("OUT\n");
            i++;
            string = OUT;
        }
    }
    arraySecondary[j] = '\0';
    printf("%s", arraySecondary);
    return 0;
}

如果我输入这个代码文件,我会得到。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAX_BUFFER   5000
#define SPACE        ' '
#define TAB          '\t'
#define IN            1
#define OUT           0

最佳答案

当你在评论区时,你应该停止增加j或者在'\0'前进时填充一些非-j的内容否则,由于未初始化,缓冲区可能会被随机'\0'停止。
我的实现是从for循环中删除arraySecondary,并按如下方式生成注释外区域语句。

    else if(string == OUT)
    {
        arraySecondary[j++] = arrayPrimary[i];
    }

关于c - C编程语言练习1-23,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21981016/

10-10 01:54