When is a do-while the better choice over other types of loops? What are some common scenarios where its better than others?
I understand the function of a do-while, but not when to use it.
When is a do-while the better choice over other types of loops? What are some common scenarios where its better than others?
I understand the function of a do-while, but not when to use it.
I've used it before if I need to implement lots of conditional checks, for example processing an input form in php. Probably not the best practice, but it's more readable than many alternatives:
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)
Also, I guess this isn't technically a loop. More like a way of avoiding using GOTO :)
I've long held that do-while is not used in C-based languages as much as it should be because the reuse of the "while" keyword is awkward and confusing. Pascal's repeat-until does not share any keywords with its while-begin-end structure.
I'd love to analyze a big heap of code someday and see if do-while is underrepresented in C code compared to similar constructs in other languages.
do while()
loops while a condition is true, but on the other hand, Pascal's repeat until
loops while a condition is false (both will run at least once).
When I program in Pascal I almost always use repeat until
.
When I program in C++ I almost always use while() {}
.
I can't explain why, but I feel it's normal. Weird?
when reading from a file or waiting for a connection to be established (other human interaction as well), anything for what the number of iterations is not known a priori (e.g. number of records returned by an sql query), or when you do steps of different size (e.g. read 1 or 5 lines from the file depending on the last one read), when going over all combinations/permutations of objects, whenever 'for' loop conditions become cumbersome
Another exception when you are doing something recursive, like the following with reading inner exceptions:
catch(Exception exc)
{
Exception currentException = exc;
do
{
Console.WriteLine(string.Format("{0}: {1}", currentException.GetType().Name, currentException.Message));
} while((currentException = currentException.InnerException) != null);
}
Normally when you need the user to input some value, the counter variable is based on the input value, you use do-while. //The following code is in C++. It requires the user to input a number and repeats until users input number larger than 0.
do{
cout << "Enter a Positive integer: ";
cin >> num;
}while( num < 0 );