C 编写代码以缩进代码

C 编写代码以缩进代码,c,indentation,C,Indentation,我的目标是编写一个C程序,缩进char*input中给出的C代码。一级缩进的样式在字符串const char*pad中给出。我已经编写了以下代码,这些代码在我的头脑中是有效的,但在实践中不是。一定有什么地方出错了,但我找不到。 另外,我不明白为什么Valgrind不喜欢包含while(…)的行。大小为1的读取无效 任何{将缩进级别增加1,任何}将缩进级别减少1。不应用其他缩进规则。我假设字符串文本中没有花括号 char *indent(char *input, const char *pad)

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

任何
{
将缩进级别增加1,任何
}
将缩进级别减少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] != '\0'){ //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] = '\0';
    return output;
}
我的代码给出:

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

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

  • 吞下(不输出)一行中的所有初始空格(在
    \n
    之后)
  • 用适当的缩进替换它们,就像从
    {
    }
实施它,并在此处询问您是否无法使其工作

更改您的线路

n = ondx;


你想把
n
作为输入中下一项的索引,而不是输出。

你有什么理由想写这篇文章而不是写一篇代码美化文章吗?“我祈祷+lenpad*90就够了”不,我拒绝进入这个平面。为了不被误解,我觉得这是一篇很好的文章!:-)但正因为如此,你应该自己解决它。100%. 真的。通过在
缩进--(在条件中),我们可以看到这一行永远不会执行。感谢您的提示。我终于注意到我写了n=ondx而不是使用ndx。我不敢相信我看了三个多小时后竟然没有发现。我将尝试稍后或明天修复其余部分,因为它仍然会抛出错误。我现在已经让代码正常工作了。现在我只需要执行你的建议。我将尝试实现它。有了ace和您的帮助,我能够使它正常工作!谢谢你把我推向正确的方向。:)
n = ondx;
n = ndx + 1;