编写代码以缩进代码

Writing a Code to Indent Code

我的目标是编写一个缩进 char *input 中给出的 C 代码的 C 程序。一级缩进的样式在字符串 const char *pad 中给出。我写了下面的代码,它在我的脑海中找到了,但在实践中却没有。一定有什么地方出错了,但我找不到。 另外,我不明白为什么 Valgrind 不喜欢包含 while(...) 的行。大小 1 的读取无效...

任何 { 将缩进级别增加一级,任何 } 将缩进级别减少一级。不应用其他缩进规则。我假设字符串文字中没有大括号。

char *indent(char *input, const char *pad)
{
    int lenpad = strlen(pad);
    int inlen = strlen(input);
    char *output = malloc(inlen+lenpad*90); //Here I'm praying +lenpad*90 is enough
    int indent = 0; 
    int i = 0;
    int j = 0;
    int ndx;
    int ondx;
    char current = 'a';
    int n;

    for(ndx=ondx=0; ndx<inlen; ndx++){
        current = input[ndx];
        if(current == '{') indent++;
        if(current == '\n'){
            output[ondx++] = '\n';
            n = ondx;
            while(input[n] != '\n' && input[n] != '[=10=]'){ //Trying to check if the line to come has a curly bracket.
                if(input[n] == '}') //If it does, don't indent that line anymore.
                    indent--;
                n++;
            }
            for(j=0; j<indent; j++){
               for(i=0; i<lenpad; i++){
                output[ondx++] = pad[i];
                } 
            }
        }
        else{
            output[ondx++] = current;
        }
    }
    free(input);
    output[ondx] = '[=10=]';
    return output;
}

而不是:

int main(void) {
    printf("asdfasdf\n");
    while (1)
    {
        while (2) {
            printf("printsomething\n");
        }
    }
}

我的代码给出:

int main(void) {
        printf("asdfasdf\n");
        while (1)
        {
            while (2) {
                printf("printsomething\n");
            }
            }
            }

在您尝试编写的代码美化器中,您必须 :

  • 吞下(不输出)一行中的所有初始空格(在 \n 之后)
  • 将它们替换为根据 {}
  • 的数量计算出的正确缩进

实现它并在这里询问你是否可以让它工作

换行

n = ondx;

n = ndx + 1;

您希望 n 成为输入中下一项的索引,而不是输出中的索引。