如何在 C 中组合两个相似的 while 循环?

How can I combine two similar while loops in C?

我正在学习 K&R C,目前正在努力使练习 1-22 的代码更具可读性。我有两个这样的循环

while (spaces != 0) {
        buf[pos]=' ';
        ++pos;
        --spaces;
}
while (tabs != 0) {
        buf[pos]='\t';
        ++pos;
        --tabs;
}

spacestabs 是整数,分别计算在 space 和制表符之前,buf[pos] 是一个字符数组。目标是在遇到字符时插入前面的 space 和制表符。遇到制表符时 spaces 设置为 0,遇到 space 时 tabs 设置为 0。

是否有任何其他方式来表达这两个循环,或者这是最易读的形式?

这是相当可读的。

我会选择以下内容:

while ( spaces-- )
   buf[ pos++ ] = ' ';

while ( tabs-- )
   buf[ pos++ ] = '\t';

如果您真的想消除重复,请使用函数。

void append_n_ch( char *buf, size_t *pos, size_t count, char ch ) {
   while ( count-- ) {
      buf[ (*pos)++ ] = ch;
}

append_n_ch( buf, &pos, spaces, ' '  );
append_n_ch( buf, &pos, tabs,   '\t' );