C 编写代码以缩进代码
我的目标是编写一个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)
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;