干掉这段代码片段(不会过多地污染命名空间)

时间:2014-03-05 05:18:26

标签: c dry namespace-organisation

我有

for (i = 1; i < max_i; i++) {
  e[i] == 1 ? printf("%ld", p[i]) : printf("%ld^%ld", p[i], e[i]);
}

在循环中,但随后需要在元素之间写入乘法符号(但不是第一个)。我不想要

e[1] == 1 ? printf("%ld", p[1]) : printf("%ld^%ld", p[1], e[1]);
for (i = 2; i < max_i; i++) {
  e[i] == 1 ? printf(" * %ld", p[i]) : printf(" * %ld^%ld", p[i], e[i]);
}

所以我写了一个快速的一次性功能

void
show_pe(int p, int e)
{
    if (e == 1)
        printf("%ld", p);
    else
        printf("%ld^%ld", p, e);
}

尽管弄脏了命名空间,但很好地删除了重复。但现在我看到以下函数有类似的代码,我的快速函数没有涵盖。我需要

void
show_e_p(int p, int e)
{
    if (e == 1)
        printf("%ld", p);
    else
        printf("%ld*%ld", e, p);
}

void
show_pe_outside(int p, int e)
{
    if (e == 1)
        printf("a(%ld)", p);
    else
        printf("a(%ld)^%ld", p, e);
}

和其他许多人。但是,由于这些只会使用两次,两行分开,这似乎是浪费(并将代码与其自然位置分开,很少是一件好事)。当然有更好的方法!想法?

1 个答案:

答案 0 :(得分:2)

提示:

do {
  code block to be executed
} while (condition);

即 - 考虑更改循环,以便重复的代码不再重复..