在何种情况下,do-while循环比其他类型的循环更好?有哪些常见的情况其优于其他循环?
我明白do-while的功能,但不知道何时使用它。
在何种情况下,do-while循环比其他类型的循环更好?有哪些常见的情况其优于其他循环?
我明白do-while的功能,但不知道何时使用它。
当你需要至少执行一次某项任务,但在开始循环之前不知道要执行多少次。
通常情况下,这不是最佳选择,但在某些情况下会很有用,比如你必须至少执行一次某个操作,但之后的迭代取决于某些条件。
do {
//do something
} while ( condition );
当需要处理某些操作,但第一次执行可能并不成功时,通常我会使用do-while语句。例如:
int x;
do
{
x = random.next(100);
cout << x << endl;
} while (x != 13);
还没有人提到它在C语言宏中的使用...
#define do_all(x) do{ foo(x); bar(x); baz(x); } while(0)
然后在代码中可以这样写:
do_all(a);
如果需要实现大量条件检查,比如在php中处理输入表单,我之前使用过它。虽然这可能不是最佳实践,但它比许多其他替代方案更易读:
do {
if ( field1_is_invalid ) {
$err_msg = "field1 is invalid"; break;
}
if ( field2_is_invalid ) {
$err_msg = "field2 is invalid"; break;
}
.. check half a dozen more things ..
// Only executes if all checks succeed.
do_some_updates();
} while (false)
当您希望在循环执行结束时检查状态时,这是合适的。因此,该循环将始终至少运行一次,然后它将验证是否应进一步迭代。
通常在需要用户输入一些值时,计数器变量基于输入值,你可以使用do-while循环。 //以下代码是用C++编写的。它要求用户输入一个数字,并重复直到用户输入的数字大于0。
do{
cout << "Enter a Positive integer: ";
cin >> num;
}while( num < 0 );
当你进行递归操作时,例如读取内部异常时,可能会出现另一种异常:
catch(Exception exc)
{
Exception currentException = exc;
do
{
Console.WriteLine(string.Format("{0}: {1}", currentException.GetType().Name, currentException.Message));
} while((currentException = currentException.InnerException) != null);
}