我正在学习K&R C,目前正在尝试使练习1-22的代码更具可读性。我有两个这样的循环
while (spaces != 0) {
buf[pos]=' ';
++pos;
--spaces;
}
while (tabs != 0) {
buf[pos]='t';
++pos;
--tabs;
}
spaces
和tabs
是整数,分别计算前面的空格和制表符,buf[pos]
是 char 数组。目标是在遇到字符时插入前面的空格和制表符。 遇到制表符时spaces
设置为 0,遇到空格时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' );