如何在 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;
}
spaces
和 tabs
是整数,分别计算在 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' );
我正在学习 K&R C,目前正在努力使练习 1-22 的代码更具可读性。我有两个这样的循环
while (spaces != 0) {
buf[pos]=' ';
++pos;
--spaces;
}
while (tabs != 0) {
buf[pos]='\t';
++pos;
--tabs;
}
spaces
和 tabs
是整数,分别计算在 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' );