C 是否存在一种优雅的方式来实现“一个;“然后做”;环

C 是否存在一种优雅的方式来实现“一个;“然后做”;环,c,coding-style,C,Coding Style,标准do while实现以下逻辑: do_something(); while(loop_condition) { do_something(); } 是否有一个通用的(即存在于C或Java或其他一些常用语言中)结构来实现以下内容 while(loop_condition) { do_something(); } do_something(); 例如,假设我需要逐行读取一个文件,每当我点击以\t开头的每一行或在EOF上时,我都要做一些事情。在不将循环内容卸载到函数的情况下,是

标准do while实现以下逻辑:

do_something();
while(loop_condition) {
    do_something();
}
是否有一个通用的(即存在于C或Java或其他一些常用语言中)结构来实现以下内容

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

例如,假设我需要逐行读取一个文件,每当我点击以
\t
开头的每一行或在
EOF
上时,我都要做一些事情。在不将循环内容卸载到函数的情况下,是否有一种不太容易出错的方法

loop_again = true;
while (loop_again) {
  loop_again = loop_condition;
  do_something();
}
或者,或者:

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

那么以下内容如何:

loop_again = true;
while (loop_again) {
  loop_again = loop_condition;
  do_something();
}
或者,或者:

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

我想你可以这样写:

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

    do_something();
}

我不知道这有多清楚。如果有一个现实的例子,我们可以用一种更有意义或更直观的方式来命名
应该继续

我想你可以这样写:

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

    do_something();
}
我不知道这有多清楚。如果有一个现实的例子,我们可以用一种更有意义或更直观的方式来命名
应该继续

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

行可能以非制表符开头,然后在行尾之前遇到EOF。我猜你的意思是“最后一行之后的EOF”

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

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

    if ( !ptr )
        break;
}
您可以转换
!ptr
如果需要,检查循环条件

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

行可能以非制表符开头,然后在行尾之前遇到EOF。我猜你的意思是“最后一行之后的EOF”

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

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

    if ( !ptr )
        break;
}

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

通常有一种方法可以修改条件,使其比以前运行一次。我认为您所拥有的条件很好。如果
do\u something()。否则,把它变成一个函数并调用它,就像你所做的那样。我必须像NPE一样需要兴奋剂。我正在努力理解示例用例和伪代码之间的关系。也许展示展示您试图避免的有问题的“易出错”方法的代码会有所帮助,因为现在我没有理解实际问题(如果我是唯一一个,我会完全承认蛋酒的迷雾)。您是否在搜索类似try{/*something*/)catch(/*something*/){}finally{/*something*/}一段时间的循环?@WhozCraig:我想我理解OP的意思。我经常发现自己在写这些“在循环中做这个,循环结束后也做一次”构造。也就是说,我认为一个具体的示例将有助于提高问题的清晰度。通常有一种方法可以修改条件,使其比以前运行一次。在我看来,您所拥有的一切都很好。如果
do\u something()
是微不足道的代码,它可以在该函数中。否则,将其作为一个函数并调用它,就像您所做的那样。我必须像NPE一样需要兴奋剂。我正在努力理解您的示例用例和伪代码之间的关系。也许显示出问题“容易出错”的代码你试图避免的方法会有帮助,因为现在我没有消化实际问题(如果我是唯一的一个,我会完全承认蛋酒的迷雾)。你是在搜索类似于try{/*something*/)catch(/*something*/){}最终{/*something*/}的东西吗一段时间的循环?@WhozCraig:我想我理解OP的意思。我经常发现自己在写这些“在循环中做这件事,并且在循环结束后也做一次”的结构。也就是说,我认为一个具体的例子将有助于提高问题的清晰度。