是否存在一种优雅的方式来实现" while-then-do"环?

时间:2014-12-27 06:43:37

标签: c coding-style

标准的do-while实现了以下逻辑:

do_something();
while(loop_condition) {
    do_something();
}

是否存在共同(即存在于C或Java或其他常用语言中)构造以实现以下内容?

while(loop_condition) {
    do_something();
}
do_something();

假设我需要逐行读取文件,并且每当我点击以\tEOF开头的每一行时都会执行某些操作。在不将循环内容卸载到函数的情况下,是否有一种不易出错的方法?

3 个答案:

答案 0 :(得分:4)

以下内容如何:

loop_again = true;
while (loop_again) {
  loop_again = loop_condition;
  do_something();
}

或者,或者:

do {
  loop_again = loop_condition;
  do_something();
} while (loop_again);

答案 1 :(得分:3)

我想你可以这样写:

bool should_keep_going = true;
while (should_keep_going) {
    should_keep_going = loop_condition;

    do_something();
}

我不确定那是多么清楚。使用一个现实的例子可能会更好,我们可能会以更有意义或更直观的方式命名should_keep_going

答案 2 :(得分:0)

  

假设我需要逐行读取文件,并且每当我点击以\ t或EOF开头的每一行时都会执行某些操作。在不将循环内容卸载到函数的情况下,是否有一种不易出错的方法?

好吧,行可能以非制表符开头,然后在行结束前遇到EOF。我假设你的意思是“最后一行之后的EOF”。

此代码执行您似乎要描述的内容:

while ( 1 )
{
    char *ptr = fgets(buf, sizeof buf, fp);
    if ( !ptr || ptr[0] == '\t' )
        do_something();

    if ( !ptr )
        break;
}

如果需要,您可以将!ptr检查转换为循环条件。