什么时候比其他类型的循环更好?有哪些常见情况比其他情况更好?
我理解do-while的功能,但不知道何时使用它。
答案 0 :(得分:54)
如果您需要至少完成一次,但不知道启动循环之前的次数。
答案 1 :(得分:3)
这通常不是最好用的,但有一种情况是你必须至少做一次事情,但任何进一步的迭代都取决于某些条件。
do {
//do something
} while ( condition );
答案 2 :(得分:3)
没有人提到它在C宏中的使用......
#define do_all(x) do{ foo(x); bar(x); baz(x); } while(0)
然后在你可以拥有的代码中
do_all(a);
答案 3 :(得分:2)
如果我需要实现大量的条件检查,我之前已经使用过它,例如在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)
另外,我猜这在技术上不是一个循环。更像是一种避免使用GOTO的方法:)
答案 4 :(得分:2)
当需要发生某些事情时,我通常会使用do-while,但它不一定会在第一次“正确”发生。例如:
int x;
do
{
x = random.next(100);
cout << x << endl;
} while (x != 13);
在这种情况下,你开始使用的x根本不重要,因为它被覆盖了。
答案 5 :(得分:1)
当您希望在循环执行结束时检查条件时,这是合适的。因此,循环将始终至少运行一次,然后它将验证它是否应该进一步迭代。
答案 6 :(得分:1)
通常,当您需要用户输入某个值时,计数器变量基于输入值,您可以使用do-while。 //以下代码在C ++中。它要求用户输入一个数字并重复直到用户输入的数字大于0。
do{
cout << "Enter a Positive integer: ";
cin >> num;
}while( num < 0 );
答案 7 :(得分:0)
当更适合做某事然后评估布尔表达式时......或者正如Brian所说......当你需要做至少一次的事情时。此语法将布尔表达式的计算结果移动到循环之后而不是循环之前。
答案 8 :(得分:0)
每当循环中的内容需要至少执行一次时。
答案 9 :(得分:0)
我一直认为,do-while不会在基于C语言的语言中使用,因为应该,因为重复使用“while”关键字是尴尬和令人困惑的。 Pascal的repeat-until不会与while-begin-end结构共享任何关键字。
我希望有一天能够分析一大堆代码,看看与其他语言中的类似结构相比,C代码中的代表性是否有所不足。
答案 10 :(得分:0)
do while()
循环,条件为 true ,但另一方面,Pascal的repeat until
循环,条件为 false (两者都将至少运行一次)。
当我在Pascal中编程时,几乎总是使用repeat until
当我用C ++编程时,我几乎总是使用while() {}
。
我无法解释原因,但我觉得它正常。奇怪?
答案 11 :(得分:0)
从文件读取或等待建立连接(其他人工交互)时,任何事先知道迭代次数的事情(例如,sql查询返回的记录数),或者何时你做了不同大小的步骤(例如,从文件读取1或5行,取决于最后一次读取),当遍历对象的所有组合/排列时,每当“for”循环条件变得麻烦时
答案 12 :(得分:0)
当您执行递归操作时的另一个例外,例如以下内容读取内部异常:
catch(Exception exc)
{
Exception currentException = exc;
do
{
Console.WriteLine(string.Format("{0}: {1}", currentException.GetType().Name, currentException.Message));
} while((currentException = currentException.InnerException) != null);
}