【问题标题】:Dry out this code snippet (without dirtying up the namespace too much)干掉这个代码片段(不要过多地弄脏命名空间)
【发布时间】:2014-03-05 05:18:26
【问题描述】:

我有

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);
}

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

【问题讨论】:

    标签: c dry namespace-organisation


    【解决方案1】:

    提示:

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

    ie - 考虑改变你的循环,这样重复的代码就不会再重复了..

    【讨论】:

    • 不适合我的用例,因为当 i > 1 时,除了 sn-p 之外,我还需要运行不同的代码。
    • 很公平。你的第一个例子(上面)没有显示。虽然后面的函数确实......你可能想编辑你的第一个例子来反映这一点;)
    • 等一下,我错了...你的重复是这个块:e[1] == 1 ? printf("%ld", p[1]) : printf("%ld^%ld", p[1], e[1]); 两次都一样...
    • 有什么原因不能让循环从 1 开始,然后在 i === 1 时未运行的位周围有一个 if 块
    • 你是对的,当然。我接受了;抱歉,如果我一开始不太清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2014-01-05
    相关资源
    最近更新 更多